XSLT 映射以根据键字段值删除段

问题描述 投票:0回答:1

我正在尝试编写 XSLT3.0 映射以在其子段 Transmission1 具有键值 //CAN BE REMOVED// 时删除 Transmission 段,我是 XSLT 代码的新手,尝试了一些但无法获得所需的输出,请协助我对此..

我附上了示例输入和输出,如下所示。请检查。

输入:

<HEADER>
    <Handle>
        
        <Subsegment>           
            <Transmission>
                <Transmission1 LC="PO">123</Transmission1>
            </Transmission>
            <Transmission>
                <Transmission1 LC="PO">456</Transmission1>
            </Transmission>
            <Transmission>
                <Transmission1 LC="PO">789 //CAN BE REMOVED//</Transmission1>
            </Transmission>
             <Transmission>
                <Transmission1 LC="PO">1011</Transmission1>
            </Transmission>
            
        </Subsegment>
    </Handle>
</HEADER>

** 所需输出:**

<HEADER>
    <Handle>
        
        <Subsegment>           
            <Transmission>
                <Transmission1 LC="PO">123</Transmission1>
            </Transmission>
            <Transmission>
                <Transmission1 LC="PO">456</Transmission1>
            </Transmission>
           
        <Transmission>
                <Transmission1 LC="PO">1011</Transmission1>
            </Transmission>
            
        </Subsegment>
    </Handle>
</HEADER>

** 我使用的 XSLT 如下:**

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

<xsl:mode on-no-match="shallow-copy"/>

<xsl:template match="Transmission"> 
      <xsl:apply-templates/>
</xsl:template>

<xsl:template match="TEXT">
        <Transmission1>
                        <xsl:copy-of select="//Transmission1[*//CAN BE REMOVED//]"/>  
            </Transmission1>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>  

请在这里帮助我。

xslt xslt-3.0
1个回答
0
投票

您可以使用身份转换作为起点,然后需要编写一个与该元素或您想要删除/防止被复制的元素匹配的空模板,例如

<xsl:template match="Transmission[Transmission1[contains(., '//CAN BE REMOVED//')]]"/>
(条件可能需要调整,目前还不清楚您是否正在寻找特定值以及
//CAN BE REMOVED//
是作为 XML 中的数据还是作为注释来指示要删除哪个元素但如果您正在寻找的数值,您当然也可以使用例如
<xsl:template match="Transmission[Transmission1[. = 789]]"/>

所以整个 XSLT 3 代码相当于例如

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="3.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="#all">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:template match="Transmission[Transmission1[contains(., '//CAN BE REMOVED//')]]"/>

</xsl:stylesheet>

或者例如

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="3.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="#all">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:template match="Transmission[Transmission1[. = 789]]"/>

</xsl:stylesheet>

在线小提琴示例是这里

© www.soinside.com 2019 - 2024. All rights reserved.