【问题标题】:How to copy parent node based on child node's condition using XSLT?如何使用 XSLT 根据子节点的条件复制父节点?
【发布时间】:2015-03-12 04:05:37
【问题描述】:

我正在努力转换以下 xml。

<root>

<node1>
  <node2 id="1">xyz</node2>
</node1>

<node1>
  <node2 id="2">abc</node2>
</node1>

<parent>
 <child>abc</child>
</parent>

</root>

我想把它转换成如下格式:

<root>

<node1>
  <node2 id="1">xyz</node2>
</node1>

<parent>
 <child>abc</child>

 <node1>
  <node2 id="2">abc</node2>
 </node1>

</parent>

</root>
  • 我正在使用标识模板复制所有元素
  • 我已经添加了模板来复制子元素

我需要检查 id 属性,如果它等于 2,则复制父节点。如果有人对此提供帮助,我将不胜感激。

提前谢谢你。

【问题讨论】:

    标签: xml xslt transformation


    【解决方案1】:

    如果您输入的 XML 格式与您的问题没有太大偏差,则此 XSLT 将起作用:

    <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:strip-space elements="*"/>
    
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="/*/*[*[@id = '2']]"/>
    
    <xsl:template match="parent">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
            <xsl:copy-of select="/*/*[*[@id = '2']]"/>
        </xsl:copy>
    </xsl:template>
    </xsl:transform>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多