Xml 使用xslt比较相同类型的两个节点的值

Xml 使用xslt比较相同类型的两个节点的值,xml,xslt,Xml,Xslt,我是XSLT新手。我需要帮助比较XML同一元素中两个节点的值 我的示例XML: <Bank> <BankName Name="ICICI" Id="101"> <Customer> <Name>A</Name> <Accno>121</Accno> <City>Delhi</City> <Balance>2

我是XSLT新手。我需要帮助比较XML同一元素中两个节点的值

我的示例XML:

<Bank>
<BankName Name="ICICI" Id="101">
    <Customer>
        <Name>A</Name>
        <Accno>121</Accno>
        <City>Delhi</City>
        <Balance>20000</Balance>
        <Pancard>c123</Pancard>
    </Customer>
    <Customer>
        <Name>B</Name>
        <Accno>122</Accno>
        <City>Gurgaon</City>
        <Balance>30000</Balance>
        <Pancard>c125</Pancard>
    </Customer>
    <Customer>
        <Name>E</Name>
        <Accno>123</Accno>
        <City>Dehradun</City>
        <Balance>20000</Balance>
        <Pancard>c124</Pancard>
    </Customer>
</BankName>
<BankName Name="PNB" Id="102">
    <Customer>
        <Name>A</Name>
        <Accno>221</Accno>
        <City>Delhi</City>
        <Balance>30000</Balance>
        <Pancard>c123</Pancard>
    </Customer>
    <Customer>
        <Name>D</Name>
        <Accno>222</Accno>
        <City>Gzb</City>
        <Balance>20000</Balance>
        <Pancard>p123</Pancard>
    </Customer>
    <Customer>
        <Name>C</Name>
        <Accno>223</Accno>
        <City>Delhi</City>
        <Balance>20000</Balance>
        <Pancard>p122</Pancard>
    </Customer>
</BankName>
<BankName Name="SBI" Id="103">
    <Customer>
        <Name>E</Name>
        <Accno>321</Accno>
        <City>Dehradun</City>
        <Balance>20000</Balance>
        <Pancard>c124</Pancard>
    </Customer>
    <Customer>
        <Name>D</Name>
        <Accno>322</Accno>
        <City>Delhi</City>
        <Balance>40000</Balance>
        <Pancard>s123</Pancard>
    </Customer>
    <Customer>
        <Name>C</Name>
        <Accno>323</Accno>
        <City>Delhi</City>
        <Balance>30000</Balance>
        <Pancard>p122</Pancard>
    </Customer>
</BankName>
</Bank>

A.
121
德里
20000
c123
B
122
古尔冈
30000
c125
E
123
德拉敦
20000
c124
A.
221
德里
30000
c123
D
222
Gzb
20000
p123
C
223
德里
20000
p122
E
321
德拉敦
20000
c124
D
322
德里
40000
s123
C
323
德里
30000
p122
我想获取包含银行名和客户详细信息的节点(XML),其中,银行卡号对于相同或不同银行的客户是相同的

输出如下:

<Bank>
<BankName Name="ICICI">
    <Customer>
        <Name>A</Name>
        <Accno>121</Accno>
        <City>Delhi</City>
        <Balance>20000</Balance>
        <Pancard>c123</Pancard>
    </Customer>
    <Customer>
        <Name>E</Name>
        <Accno>123</Accno>
        <City>Dehradun</City>
        <Balance>20000</Balance>
        <Pancard>c124</Pancard>
    </Customer>
</BankName>
<BankName Name="PNB">
    <Customer>
        <Name>A</Name>
        <Accno>221</Accno>
        <City>Delhi</City>
        <Balance>30000</Balance>
        <Pancard>c123</Pancard>
    </Customer>
    <Customer>
        <Name>C</Name>
        <Accno>223</Accno>
        <City>Delhi</City>
        <Balance>20000</Balance>
        <Pancard>p122</Pancard>
    </Customer>
</BankName>
<BankName Name="SBI">
    <Customer>
        <Name>E</Name>
        <Accno>321</Accno>
        <City>Dehradun</City>
        <Balance>20000</Balance>
        <Pancard>c124</Pancard>
    </Customer>
    <Customer>
        <Name>C</Name>
        <Accno>323</Accno>
        <City>Delhi</City>
        <Balance>30000</Balance>
        <Pancard>p122</Pancard>
    </Customer>
</BankName>
</Bank>

A.
121
德里
20000
c123
E
123
德拉敦
20000
c124
A.
221
德里
30000
c123
C
223
德里
20000
p122
E
321
德拉敦
20000
c124
C
323
德里
30000
p122

这里有一种方法来看待它:

XSLT2.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:strip-space elements="*"/>

<xsl:key name="cust-by-pan" match="Customer" use="Pancard" />
<xsl:variable name="duplicates" select="Bank/BankName/Customer[count(key('cust-by-pan', Pancard)) gt 1]" />

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

<xsl:template match="BankName[not(Customer intersect $duplicates)]"/>
<xsl:template match="Customer[not(. intersect $duplicates)]"/>

</xsl:stylesheet>


“获取包含银行名和客户详细信息的节点(XML),其中不同银行的客户的银行卡号相同。”1。您的意思是要检测重复的
Pancard
值吗?如果他们在同一家银行呢2.请说明是使用XSLT 1.0还是2.0,并发布转换的预期输出。是的,我想使用XSLT 2.0检测不同银行或同一银行具有相同银行卡号的客户。我正在更新预期的输出,这对我来说太完美了!!。。。谢谢