XSLT根据另一个节点的属性删除节点

时间:2016-06-10 13:21:17

标签: xml xslt

我有这个XML文件,我需要删除属性为languageCode =“FR”的ContentText元素,如果存在属性为languageCode =“EN”的ContentText元素,则保留法文文本。

当前XML:

<MaterialByElementsResponse_sync>
  <Material>
    <Detail>
        <ContentText languageCode="FR">Inscription</ContentText>
        <ContentText languageCode="EN">Subscription</ContentText>
    </Detail>  
  </Material>   
</MaterialByElementsResponse_sync>

期望的输出:

<MaterialByElementsResponse_sync>
  <Material>
    <Detail>
        <ContentText languageCode="EN">Subscription</ContentText>
    </Detail>  
  </Material>   
</MaterialByElementsResponse_sync>

我试过这个XSLT但是它总是删除FR文本,即使EN文本不存在:         

  <xsl:template match="node()|@*">

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

  </xsl:template>
  <xsl:template match="ContentText[@languageCode='FR']"/>
 </xsl:stylesheet>

请记住,如果没有英文文本,则不应删除法文文本。

非常感谢。

1 个答案:

答案 0 :(得分:1)

变化:

<xsl:template match="ContentText[@languageCode='FR']"/>

为:

<xsl:template match="ContentText[@languageCode='FR'][../ContentText[@languageCode='EN']]"/>