0

我已经问了一个关于我的代码的问题,一些好人让我走上了正确的道路,但现在我需要知道一些具体的事情,希望你能帮助我。我搜索了几个小时并找到了一些东西,但无法真正弄清楚它是否是正确的解决方案。好的,让我解释一下。我的文件中有这段代码:

<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代码将这个xsl文件在eclipse中转换为xml文件。第三个问题:你能给我一个提示,或者一个有帮助的网站吗?

谢谢!

问候 Dotana

4

1 回答 1

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>
于 2013-04-26T19:34:28.177 回答