我工作XSLT具有使用忽略重複邏輯(MySegment/*[not(.=preceding::*)]).
XSLT:忽略重複相似的價值觀
輸入:
<MySegment>
<Field1>ABCD</Field1>
<FIeld2>1</Field2>
</MySegment>
<MySegment>
<Field1>ABCD123</Field1>
<FIeld2>1</Field2>
</MySegment>
這裏,我們有兩個不同的值,但是因爲ABCD123包含ABCD以及,它被視爲重複條目。任何人都可以建議。
這裏是我的XSLT看起來像:
<xsl:stylesheet version="1.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="/RecordsInp">
<xsl:for-each select="ParentSegment">
<xsl:for-each select="./MySegment/*[not(.=preceding::*)]">
<A>
<Field1><xsl:value-of select ="name(.)"/></Field1>
<Field2><xsl:value-of select="."/></Field2>
</A>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我輸入的是:
<RecordsInp>
<ParentSegment>
<MySegment>
<Field1>ABC</Field1>
<Field2>A1</Field2>
</MySegment>
<MySegment>
<Field1>ABC</Field1>
<Field2>A1</Field2>
</MySegment>
<MySegment>
<Field1>ABCDEF</Field1>
<Field2>ABC</Field2>
</MySegment>
</ParentSegment>
</RecordsInp>
我所得到的是:
<?xml version="1.0" encoding="UTF-8"?>
<A>
<Field1>Field1</Field1>
<Field2>ABC</Field2>
</A><A>
<Field1>Field2</Field1>
<Field2>A1</Field2>
</A><A>
<Field1>Field1</Field1>
<Field2>ABCDEF</Field2>
</A>
注意,我沒有得到字段2 = ABC在最後一次出現。由於字段2從來沒有在先前出現過ABC,我需要以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<A>
<Field1>Field1</Field1>
<Field2>ABC</Field2>
</A><A>
<Field1>Field2</Field1>
<Field2>A1</Field2>
</A><A>
<Field1>Field1</Field1>
<Field2>ABCDEF</Field2>
</A>
<A>
<Field1>Field2</Field1>
<Field2>ABC</Field2>
</A>
*「因爲ABCD123也包含ABCD,它被視爲重複」* - 否,而不是您顯示的XPath。 – Tomalak
你能否建議如何解決這個問題?我的目標是循環遍歷此段的所有字段,並將它們填充到標題中,而不會有任何重複。 – Tpi
我們無法就如何糾正代碼提供建議,而無需清楚地解釋代碼應該執行的操作,並至少呈現演示錯誤行爲的特徵示例。再加上示例輸入以及預期和觀察輸出,我們將其稱爲[mcve],這是我們希望您在提出修復代碼的幫助中提供的問題。 –