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