Заранее благодарим за то, что нашли время, чтобы прочитать это.Ключи XSLT 1.0 сравнивают несколько ключей
У меня есть входная XML, который выглядит как
<data>
<row>
<Field1>ABC</Field1>
<Field2>123</Field2>
<tag3>BLAH</tag3>
<tag4>BLAH1</tag4>
</row>
<row>
<Field1>ABC</Field1>
<Field2>789</Field2>
<tag3>BLAH</tag3>
<tag4>BLAH1</tag4>
</row>
<row>
<Field1>DEF</Field1>
<Field2>456</Field2>
<tag3>BLAH3</tag3>
<tag4>BLAH4</tag4>
</row>
<row>
<Field1>456</Field1>
<Field2>XYZ</Field2>
<tag3>BLAH5</tag3>
<tag4>BLAH6</tag4>
</row>
Теперь я два ключа, определенную как так
<xsl:key name="Field1Key" match="data/row/Field1/text()" use="."/>
<xsl:key name="Field2Key" match="data/row/Field2/text()" use="."/>
Что я делаю с ключами к перебрать уникальные значения Field1 и Field2 составляют
<xsl:for-each select="data/row/Field1/text()[generate-id() = generate-id(key('Field1Key',.)[1])]">
<test>
<xsl:value-of select="."/>
</test>
</xsl:for-each>
<xsl:for-each select="data/row/Field2/text()[generate-id() = generate-id(key('Field2Key',.)[1])]">
<test>
<xsl:value-of select="."/>
</test>
</xsl:for-each>
Который дает мне выход, который выглядит как
<test>ABC</test>
<test>DEF</test>
<test>456</test>
<test>123</test>
<test>789</test>
<test>456</test>
<test>XYZ</test>
так что моя проблема в том,
Как избежать значения 456 от появления в два раза? не могли бы вы указать мне наиболее эффективный способ достичь этого, поскольку я имею дело с большим количеством данных во входных данных?
спасибо.
Спасибо Dimitre. Метод отлично работает с тем, что мне нужно достичь. Очень признателен. –
@arjunajjarapu, добро пожаловать. –