我一直在努力转换XML文档。我已经完成了w3schools教程,但我尝试的所有内容都以这种或那种方式失败了。 基本上我正试图改变这个:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Report Title="Nodes">
<Record NodeID="123" NodeName="TESTNode1" IP_Address="251.300.000.001" />
</Report>
进入这个:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Report Title="Nodes">
<Record>
<NodeID>123</NodeID>
<NodeName>TestNode1</NodeName>
<IP_Address>251.300.000.001</IP_Address>
</Record>
</Report>
非常感谢任何帮助。 感谢。
答案 0 :(得分:0)
此样式表将为您进行转换:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="Record">
<Record>
<NodeID><xsl:value-of select="@NodeID"/></NodeID>
<NodeName><xsl:value-of select="@NodeName"/></NodeName>
<IP_Address><xsl:value-of select="@IP_Address"/></IP_Address>
</Record>
</xsl:template>
<xsl:template match="/Report">
<Report>
<xsl:copy-of select="@Title"/>
<xsl:apply-templates select="Record"/>
</Report>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
或者,您可以使用基于identity transform的更通用的模板,例如
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="node()|/node()/@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:element name="{local-name()}">
<xsl:value-of select="." />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
在这种情况下,不必枚举所有属性/元素。在另一方面 - 正如@JLRishe所指出的那样 - 无法保证从属性创建的元素的顺序。