我需要使用xslt在同一父元素中选择第二次出现的相同元素。
我正在显示我的xml..
<parent>
<a>0001</a>
<b>05</b>
<c>20160825</c>
<d>9463</d>
<e>anders skov petersen</e>
<f></f>
<g></g>
<h></h>
<i></i>
<a>0002</a>
<b>05</b>
<c>20160825</c>
<d>9463</d>
<e>anders skov petersen</e>
<f></f>
<g></g>
<h></h>
<i></i>
</parent>
在我的xml中,a, b, c和所有其他元素出现两次。所以如果我需要在XSLT中第二次获取元素的值那么谁能告诉我怎么做?
您可以使用以下XPath-Expression
访问第二个a/parent/a[2]
这是
的缩写形式/parent/a[position()=2]
见https://www.w3.org/TR/xpath/
尝试识别在同一父元素中出现两次的相同元素(名称,而不是内容):
输入XML:<parent>
<a>0001</a>
<b>05</b>
<c>20160825</c>
<d>9463</d>
<e>anders skov petersen</e>
<f></f>
<g></g>
<h></h>
<i></i>
<a>0002</a>
<b>05</b>
<c>20160825</c>
<d>9463</d>
<e>anders skov petersen</e>
<f></f>
<g></g>
<h></h>
<i></i>
<j>New element</j>
</parent>
XSLT 1.0 :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="kDuplicate" match="*[generate-id(parent::*) =
generate-id(current()/parent::*)]" use="name()"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()[key('kDuplicate', name())[2]]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="parent">
<xsl:copy>
<xsl:for-each select="descendant::*[key('kDuplicate', name())[2]]">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Result:(元素j
不出现,因为它只在父元素中出现一次)
<parent>
<a>0001</a>
<b>05</b>
<c>20160825</c>
<d>9463</d>
<e>anders skov petersen</e>
<f/>
<g/>
<h/>
<i/>
<a>0002</a>
<b>05</b>
<c>20160825</c>
<d>9463</d>
<e>anders skov petersen</e>
<f/>
<g/>
<h/>
<i/>
</parent>