0

我一直在努力转换 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>

任何帮助将不胜感激。谢谢。

4

2 回答 2

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>
于 2013-08-09T13:16:52.257 回答
0

或者,您可以使用基于身份转换的更通用模板,例如

<?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 指出的那样 - 不能保证从属性创建的元素的顺序。

于 2013-08-09T13:53:08.000 回答