删除兄弟节点中匹配的 Xml 节点

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

尝试使用 xslt 删除兄弟节点文本中匹配的 Xml 节点

我的 xml 如下所示

    <?xml version="1.0" encoding="UTF-8"?>
    <root xmlns:map="http://www.w3.org/2005/xpath-functions/map">
    <row>
        <Name>Africa</Name>
    </row>
    <row>
        <Name>USA</Name>
    </row>
    <row>
        <Name>Mexico</Name>
    </row>
    <row>
        <Name>Canada</Name>
    </row>
    <row>
        <Name>Malaysia</Name>
    </row>
    <row>
        <Name>Africa</Name>
    </row>
    <row>
        <Name>Mexico</Name>
    </row>
    <row>
        <Name>Bangladesh</Name>
    </row>
    </root>`

我需要的输出如下

   
    `<?xml version="1.0" encoding="UTF-8"?>
     <root >
     <row>
      <Name>USA</Name>
     </row>
     <row>
      <Name>Canada</Name>
     </row>
     <row>
      <Name>Malaysia</Name>
     </row>
     <row>
      <Name>Bangladesh</Name>
     </row>
     </root>

` 在 xslt 下尝试过,但在输出 xml 代码中也看到了非洲和墨西哥。我希望这两个重复的节点以及具有相同值的原始节点从输出中完全删除

    `<xsl:stylesheet version="2.0" 
       <xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
      <xsl:strip-space elements="*"/>
       <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
     </xsl:template>
    
    
     <xsl:template match="row[.=preceding-sibling::row/.]"/>
     </xsl:stylesheet>`

在 xslt 上尝试过此操作,但在输出中仍然看到非洲和墨西哥节点。

请帮我删除输出中的这些节点。`

xml xslt duplicates xml-parsing
1个回答
0
投票

这是一种简单的方法:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/root">
    <xsl:copy>
        <xsl:for-each-group select="row" group-by="Name">
            <xsl:if test="count(current-group())=1">
                <xsl:copy-of select="."/>
            </xsl:if> 
        </xsl:for-each-group>
    </xsl:copy>
</xsl:template>
    
</xsl:stylesheet>
© www.soinside.com 2019 - 2024. All rights reserved.