我有一个带有多个节点和子节点的XML。我需要不同的节点。我找到了很多示例,但是它们是用于单个子节点的,而不是我想检查多个子节点时。他们要么对我不起作用,要么我每次都只能获得1个子节点。不是整排小组。
<Rowsets>
<Rowset>
<Row>
<alpha>1111</alpha>
<bravo>2222</bravo>
<charlie>3333</charlie>
</Row>
<Row>
<alpha>165165</alpha>
<bravo>2165165</bravo>
<charlie>654165</charlie>
</Row>
<Row>
<alpha>1111</alpha>
<bravo>2222</bravo>
<charlie>3333</charlie>
</Row>
</Rowset>
</Rowsets>
所以我需要一个带有不同行节点的输出。如您所见,第一个和最后一行节点是相同的。我如何仅使用2行节点获得输出,因为第三个仅是双人。
类似的东西:
<Rowsets>
<Rowset>
<Row>
<alpha>1111</alpha>
<bravo>2222</bravo>
<charlie>3333</charlie>
</Row>
<Row>
<alpha>165165</alpha>
<bravo>2165165</bravo>
<charlie>654165</charlie>
</Row>
</Rowset>
</Rowsets>
行节点不是必需的。我只需要独特的行节点。
目前我正在尝试以这个方向找到它:
<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:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Rowsets/Rowset/Row[alpha = following::Rowsets/Rowset/Row/alpha and bravo = following::Rowsets/Rowset/Row/bravo and charlie = following::Rowsets/Rowset/Row/charlie]"/>
</xsl:stylesheet>
使用Muenchian分组。制作钥匙:
<xsl:key name="row" match="Row" use="concat(alpha, '|', bravo, '|', charlie)" />
和输出仅满足的行:
Row[count(. | key('row', concat(alpha, '|', bravo, '|', charlie))[1]) = 1]
尝试此
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Row[. = preceding-sibling::Row]"/>