在下面的xml中,我想忽略第三个节点<Data1>12347</Data1>
,因为我必须只考虑第一个唯一出现的refCode
。由于refCode的第一个节点值和第三个节点值是112233,我想忽略第三个节点。
<?xml version="1.0" encoding="UTF-8"?>
<Example>
<Row>
<Data1>12345</Data1>
<Data2>
<DataRef>
<RefName>refCode</RefName>
<RefValue>112233</RefValue>
</DataRef>
<DataRef>
<RefName>SKU</RefName>
<RefValue>444-1112</RefValue>
</DataRef>
</Data2>
</Row>
<Row>
<Data1>12346</Data1>
<Data2>
<DataRef>
<RefName>refCode</RefName>
<RefValue>325325</RefValue>
</DataRef>
<DataRef>
<RefName>SKU</RefName>
<RefValue>444-1113</RefValue>
</DataRef>
</Data2>
</Row>
<Row>
<Data1>12347</Data1>
<Data2>
<DataRef>
<RefName>refCode</RefName>
<RefValue>112233</RefValue>
</DataRef>
<DataRef>
<RefName>SKU</RefName>
<RefValue>444-1114</RefValue>
</DataRef>
</Data2>
</Row>
</Example>
答案 0 :(得分:0)
对于XSLT-1.0,使用具有不同值原则的XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="distinct" match="Row" use="Data2/DataRef/RefValue" />
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- matches unique Row elements -->
<xsl:template match="Row[generate-id(key('distinct',Data2/DataRef/RefValue)) = generate-id()]">
<xsl:copy-of select="."/>
</xsl:template>
<!-- ignores doublettes -->
<xsl:template match="Row" />
</xsl:stylesheet>