以下代碼用于輸出在其他組中找到的“g”中的行李編號。有什么方法可以實作相同的使用xsl:key嗎?理想情況下,“g”將是一個引數,因此我不必為“h”、“i”等重復類似的代碼。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<g>
<bagn>A</bagn>
<bagn>B</bagn>
</g>
<h>
<bagn>C</bagn>
<bagn>D</bagn>
<bagn>A</bagn>
</h>
<i>
<bagn>B</bagn>
<bagn>F</bagn>
<bagn>G</bagn>
</i>
</root>
<xsl:variable name="gDups">
<xsl:for-each select="/root/g/bagn[.=/root/node()[not(self::g)]/bagn]">
<xsl:choose>
<xsl:when test="position()=1">
<xsl:value-of select="concat('|',.,'|')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(.,'|')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$gDups"/>
uj5u.com熱心網友回復:
考慮以下示例:
XSLT 1.0
<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:key name="bagn" match="bagn" use="." />
<xsl:template match="/root">
<duplicates>
<xsl:for-each select="*">
<!-- duplicates in siblings -->
<xsl:variable name="dups" select="key('bagn', bagn)[not(generate-id(..) = generate-id(current()))]" />
<xsl:if test="$dups">
<xsl:copy>
<xsl:for-each select="$dups">
<xsl:value-of select="."/>
<xsl:if test="position()!=last()">|</xsl:if>
</xsl:for-each>
</xsl:copy>
</xsl:if>
</xsl:for-each>
</duplicates>
</xsl:template>
</xsl:stylesheet>
應用于您的示例輸入,這將回傳:
結果
<?xml version="1.0" encoding="UTF-8"?>
<duplicates>
<g>A|B</g>
<h>A</h>
<i>B</i>
</duplicates>
請注意,這將回傳其他兄弟姐妹中重復項的串列,即使兄弟姐妹具有相同的名稱。例如,對于輸入:
<root>
<g>
<bagn>A</bagn>
<bagn>B</bagn>
</g>
<g>
<bagn>C</bagn>
<bagn>D</bagn>
<bagn>A</bagn>
</g>
<g>
<bagn>B</bagn>
<bagn>F</bagn>
<bagn>G</bagn>
</g>
</root>
結果將是:
<?xml version="1.0" encoding="UTF-8"?>
<duplicates>
<g>A|B</g>
<g>A</g>
<g>B</g>
</duplicates>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/365388.html
上一篇:XSLT:如何將值連接到全域變數
下一篇:來自SQLServer的XML
