2013-04-26 86 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