使用迭代复制XML节点

时间:2011-12-01 17:29:31

标签: xml xslt iteration

我有一个关于使用xslt复制一些xml的问题。

我有xml,有时包含带有迭代的父节点。它们看起来像这样。

<opdracht iteration="1">
         <a> 1 </a>
         <b> 1 </b>
</opdracht>
<opdracht iteration="2">
         <a> 1 </a>
         <b> 1 </b>
</opdracht>
<opdracht iteration="3">
         <a> 1 </a>
         <b> 1 </b>
</opdracht>

如果我选择3个项目,xml将构建3个迭代节点。但是如果我选择6个项目中的5个,它会生成5或6个不同的xml迭代。

我需要制作一些允许我复制这些父迭代节点和子迭代节点的XSLT,只要它们被迭代。并以相同的原始名称输出它们。所以:

<opdracht iteration="1"> Becomes <opdracht>
And
<opdracht iteration="2"> becomes also <opdracht>

等等......

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我不完全理解这个问题,但我“想”你说要复制XML,但是从 opdracht 中删除 @iteration 属性元件。

如果是这种情况,您可以通过XSLT 身份转换的简单扩展来实现

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:template match="opdracht/@iteration" />

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

应用于以下XML

<root>
<opdracht iteration="1"> 
         <a> 1 </a> 
         <b> 1 </b> 
</opdracht> 
<opdracht iteration="2"> 
         <a> 1 </a> 
         <b> 1 </b> 
</opdracht> 
<opdracht iteration="3"> 
         <a> 1 </a> 
         <b> 1 </b> 
</opdracht> 
</root>

以下是输出:

<root>
  <opdracht>
    <a> 1 </a>
    <b> 1 </b>
  </opdracht>
  <opdracht>
    <a> 1 </a>
    <b> 1 </b>
  </opdracht>
  <opdracht>
    <a> 1 </a>
    <b> 1 </b>
  </opdracht>
</root>