我需要使用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中第二次出现的元素值,那么可以告诉我如何做到这一点吗?
答案 0 :(得分:1)
您可以使用以下XPath-Expression
访问第二个a/parent/a[2]
这是
的缩写形式/parent/a[position()=2]
答案 1 :(得分:0)
尝试此选项以识别在同一父级中出现两次的相同元素(名称,而不是内容):
输入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>
结果(元素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>