使用样式表重命名元素

时间:2018-01-02 11:34:09

标签: xslt

我有一个XML文件,如下所示,我想使用样式表将属性名称更改为元素名称,然后重命名父级' g'元素包含子元素的文本(如果有意义的话)

原始XML

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="test.xsl" type="text/xsl"?>
<c version="0.1">
 <f>
  <g>
   <column name="A/B">Test_1</column>
   <column name="C/D">NA</column>
  </g>
  <g>
   <column name="A/B">Test_2</column>
  </g>
  <g>
   <column name="A/B">Test_3</column>
  </g>
 </f>
</c>

我想产生这个:

<?xml version='1.0' encoding='UTF-8'?>
<c version="0.1">
 <f>
  <gTest_1>
   <a_b>Test_1</a_b>
   <c_d>NA</c_d>
  </gTest_1>
  <gTest_2>
   <a_b>Test_2</a_b>
  </gTest_2>
  <gTest_3>
   <a_b>Test_3</a_b>
  </gTest_3>
 </f>
</c>

这是样式表:

<?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()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
  </xsl:template>

  <xsl:variable name="lowerCase" select="'abcdefghijklmnopqrstuvwxyz'" />
  <xsl:variable name="upperCase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

  <xsl:template match="column">
    <xsl:element name="{translate(translate(@name,'/','_'),     $upperCase,$lowerCase)}">
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

此样式表使用属性名称更改重命名元素名称。如何使用属性&#34; A / B&#34;?

的子元素的元素文本重命名父元素

感谢。

1 个答案:

答案 0 :(得分:1)

添加模板

  <xsl:template match="g">
      <xsl:element name="{local-name()}{column[@name = 'A/B']}">
          <xsl:apply-templates/>
      </xsl:element>
  </xsl:template>

http://xsltfiddle.liberty-development.net/3Nqn5Y5