Xml XSLT 1.0使用多个子节点进行区分

Xml XSLT 1.0使用多个子节点进行区分,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我有一个包含多个节点和子节点的xml。我需要不同的节点。 我发现了很多示例,但它们都是针对单个子节点的,而不是在我想检查多个子节点时。它们要么不适合我,要么我每次只能得到一个子节点。不是整行组 <Rowsets> <Rowset> <Row> <alpha>1111</alpha> <bravo>2222</bravo> <charlie>3333

我有一个包含多个节点和子节点的xml。我需要不同的节点。 我发现了很多示例,但它们都是针对单个子节点的,而不是在我想检查多个子节点时。它们要么不适合我,要么我每次只能得到一个子节点。不是整行组

<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>

1111
2222
3333
165165
2165165
654165
1111
2222
3333
所以我需要一个具有不同行节点的输出。 如您所见,第一行和最后一行节点是相同的。 由于第三行节点仅为双行节点,如何获得只有两行节点的输出

大概是这样的:

<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>

1111
2222
3333
165165
2165165
654165
行集节点不是必需的。我只需要唯一的行节点

目前我正试图从这个方向找到它:

<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>

试试这个

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>
<xsl:template match="Row[. = preceding-sibling::Row]"/>  

使用。制作您的钥匙:

<xsl:key name="row" match="Row" use="concat(alpha, '|', bravo, '|', charlie)" />

似乎OP可能有多个行集,并希望在它们之间进行划分,也就是说文本是相同的,即123==123,通过这个度量,这很简单,也很有效。谢谢。它就像一个符咒。@tolanj你到底是什么意思?我试过了,它删除了重复的行。有什么特殊情况我应该知道吗?作为所有子节点的组合,它应该是不同的。对重复行进行第二次复制,删除alpha的最后5个,将其添加到bravo的前面,现在是唯一的,不会出现在输出中这是说“是第1行中文本的值==第2行中文本的值”
Row[count(. | key('row', concat(alpha, '|', bravo, '|', charlie))[1]) = 1]