解析此xsl或xml格式

时间:2013-04-26 17:59:05

标签: xml parsing xslt

我已经问了一个关于我的代码的问题,一些好人把我放在了正确的方向,但是现在我需要了解具体的内容并希望你能帮助我。 我用谷歌搜索了几个小时,发现了一些东西,但是不能确定它是否是正确的解决方案。 好的,我来解释一下。 我在我的文件中有这个代码:

<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格式的方法,而不是相反。 我的目标是通过java代码将eclipse中的这个xsl文件转换为xml文件。 第三个问题:你能给我一个提示吗,或者一个有帮助的网站?

谢谢!

此致 Dotana

1 个答案:

答案 0 :(得分: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>