【问题标题】:XSLT Remove node based on another node's attributeXSLT 根据另一个节点的属性删除节点
【发布时间】:2016-10-11 11:44:57
【问题描述】:

我有这个 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>

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

非常感谢。

【问题讨论】:

  • 我将当前的 XSLT 添加到主题中。你可以看看。谢谢。

标签: xml xslt


【解决方案1】:

变化:

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

到:

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

【讨论】:

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