XSLT模板-有条件地添加或删除节点

时间:2018-11-02 17:13:56

标签: xslt xslt-1.0

这是我需要做的:

  1. 如果存在子2和子3,我需要在子1之后创建一个<child1.5>节点并删除子2
  2. 如果不存在孩子3,我需要将孩子2变成孩子3

原始文档

<parent>
  <child1>
  </child1>
  <child2>
  </child2>
 </parent>
<parent>
  <child1>
  </child1>
  <child2>
  </child2>
  <child3>
  </child3>
</parent>

1 个答案:

答案 0 :(得分:0)

您可以使用以下样式表/模板集:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

  <xsl:template match="parent[child2 and child3]">
    <xsl:copy>
      <xsl:copy-of select="child1"/>
      <child1.5>
        Content
      </child1.5>
      <xsl:copy-of select="child3"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="parent[child2 and not(child3)]">
    <xsl:copy>
      <xsl:copy-of select="child1"/>
      <child3>
        <xsl:value-of select="child2" />
      </child3>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

输出为(带有root元素,可让您的XML 格式正确的):

<?xml version="1.0"?>
<root>
    <parent><child1>
        </child1>
        <child3>
        </child3>
    </parent>
    <parent><child1>
        </child1>
        <child1.5>
            Content
        </child1.5>
        <child3>
        </child3>
    </parent>
</root>