插入具有特定属性的新元素

时间:2013-04-26 13:18:34

标签: xml xslt insert

这里是源xml的摘录:

 <text key="#OK" default="TEST">
        <lang id="de" value="i.O." />
        <lang id="en" value="OK" />
        <lang id="cz" value="ak" />
        <lang id="dk" value="OK" />
 </text>

我想转换此文档,以便在每个text元素中使用lang属性“ch”和id属性的新value元素插入文本元素的default attritbute的内容。

结果应如下所示:

 <text key="#OK" default="TEST">
      <lang id="de" value="i.O." />
      <lang id="en" value="OK" />
      <lang id="cz" value="ak" />
      <lang id="dk" value="OK" />
      <lang id="ch" value="TEST" />
 </text>

非常非常感谢任何正确方向的推动。

1 个答案:

答案 0 :(得分:1)

这样做:

<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:strip-space elements="*" />

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

  <xsl:template match="text">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
      <lang id="ch" value="{@default}" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

在样本输入上运行时,结果为:

<text key="#OK" default="TEST">
  <lang id="de" value="i.O." />
  <lang id="en" value="OK" />
  <lang id="cz" value="ak" />
  <lang id="dk" value="OK" />
  <lang id="ch" value="TEST" />
</text>