使用xslt插入无界XML元素

时间:2011-06-07 17:52:03

标签: xml xslt

我发布了许多关于使用XSLT插入XML元素的问题,我是XSLT的新手,我正在学习它。所以感谢帮助我的每个人。

现在,我想出了另一个问题:所以我插入一个可重复(无界)的XML元素,因此它将具有相同的xpath但元素的值不同,当我将xpath与模板模式匹配时,它会覆盖已插入的早期元素。那么有没有办法使用相同的xpath将多个元素插入到现有的XML中?我的输入是xpath,其中应插入这些元素和元素值。例如,我的输入是:

xpath: /root/child
element to insert: new_element
with the values: new1, new2 new3

所以输出应该如下:

<root>
 <child> 
   <new_element>new1</new_element>
   <new_element>new2</new_element>
   <new_element>new3</new_element>
  </child>
</root>

谢谢:)

1 个答案:

答案 0 :(得分:1)

我可能会误解你的问题,但鉴于你帖子中的细节,很难实现你的意图。我不应该猜到这里我知道......无论如何,你对这样的事情感兴趣吗?

示例转换:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:variable name="newdata">
   <new_element>new1</new_element>
   <new_element>new2</new_element>
   <new_element>new3</new_element>
 </xsl:variable>

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

<xsl:template match="/root/child">
    <xsl:copy>
        <xsl:copy-of select="$newdata"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

鉴于此输入

<root>
 <child/> 
</root>

返回:

<root>
   <child>
      <new_element>new1</new_element>
      <new_element>new2</new_element>
      <new_element>new3</new_element>
   </child>
</root>