如何在一个节点上添加标签文本作为另一个标签的属性..?

时间:2011-11-15 04:30:14

标签: xml xslt xpath

我有一个XML文件,其中包含以下标记。这些是使用次数的同一XML文件的一部分。手动更换将是一件令人厌烦的工作。

<Ids>
 <Id><No>1</No></Id>
 <Id><No>2</No></Id>
 <Id><No>3</No></Id>
 <Id><No>4</No></Id>
</Ids>

我想将其更改为以下格式 -

<Ids>
 <Id n="1"><No>1</No></Id>
 <Id n="2"><No>2</No></Id>
 <Id n="3"><No>3</No></Id>
 <Id n="4"><No>4</No></Id>
</Ids>

上述标记是XML文件的一部分。 XML文件包含其他各种标记。提前致谢

1 个答案:

答案 0 :(得分:2)

使用:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Id">
    <xsl:copy>
      <xsl:attribute name="n">
        <xsl:value-of select="No"/>
      </xsl:attribute>

      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

输入XML:

<Ids>
  <Id>
    <No>1</No>
  </Id>
  <Id>
    <No>2</No>
  </Id>
  <Id>
    <No>3</No>
  </Id>
  <Id>
    <No>4</No>
  </Id>
</Ids>

输出XML:

<Ids>
  <Id n="1">
    <No>1</No>
  </Id>
  <Id n="2">
    <No>2</No>
  </Id>
  <Id n="3">
    <No>3</No>
  </Id>
  <Id n="4">
    <No>4</No>
  </Id>
</Ids>