Xml 使用xslt比较相同类型的两个节点的值
我是XSLT新手。我需要帮助比较XML同一元素中两个节点的值 我的示例XML: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
<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检测不同银行或同一银行具有相同银行卡号的客户。我正在更新预期的输出,这对我来说太完美了!!。。。谢谢