2013-04-26 37 views
0

我已經問了一個關於我的代碼的問題,一些好人讓我走上了正軌,但是現在我需要知道一些具體的東西,並希望你能幫助我。 我GOOGLE了幾個小時,發現了一些東西,但無法真正弄清楚它是否是正確的解決方案。好的,讓我解釋一下。 我有這樣的代碼在我的文件:解析這個xsl或xml格式

<states xsi:type="auto:InitialState" name="Anfang"/> 
<act name="Megadon" start="//@states.2" end="//@states.3"/> 

我發現了一個線索,這不是XML格式,但XSL格式。 第一個問題:這是正確的嗎?

我的目標是把它以XML格式是這樣的:

<states> <xsi:type>auto:InitialState</xsi:type> <name>Anfang</name> </states> 
<act> <name>Megadon</name> <start>//@states.2</start> <end>//@states.3</end> </act> 

真正 XML。 我得到了使用名爲XSLT的工具的建議。 第二個問題:我是否需要自己解析它,或者我可以簡單地將我的xsl格式作爲輸入並獲取xml作爲輸出? 不知怎的,我總是發現從xml到這種xsl格式的方式,而不是其他方式。 我的目標是將eclipse中的這個xsl文件通過java代碼轉換爲xml文件。 第三個問題:您可以給我一個小費來做到這一點,或幫助一個網站?

謝謝!

問候 Dotana

回答

0

XSL(其是相同的XSLT) XML的一種形式,但已示出的XML沒有XSLT。您可以使用XSLT到XML轉換成你想要的格式,例如:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> 

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="act"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*"> 
     <xsl:sort 
      select="string-length(
        substring-before('|name|start|end|', 
            local-name()))" 
      data-type="number" /> 
     </xsl:apply-templates> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="act/@*"> 
    <xsl:element name="{name()}"> 
     <xsl:value-of select="." /> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

如果你運行這個XSLT具有以下作爲輸入:

<n xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <states xsi:type="auto:InitialState" name="Anfang"/> 
    <act name="Megadon" start="//@states.2" end="//@states.3"/> 
</n> 

結果將是:

<n xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <states xsi:type="auto:InitialState" name="Anfang" /> 
    <act><name>Megadon</name><start>//@states.2</start><end>//@states.3</end></act> 
</n> 
+0

謝謝你這個偉大的解決方案! – Dotana 2013-04-27 11:17:30