Xpath получает различные имена дочерних узлов, что число имен больше, чем один - PullRequest
0 голосов
/ 03 апреля 2012

Как я могу получить через Xpath имя отдельного дочернего узла, которое имя получило более одного раза?

если это xml:

> <el>
>     <name1></name1>
>     <name1></name1>
>     <name1></name1>
>     <name2></name2>
>     <name1></name1>
>     <name2></name2>
>     <name2></name2>
>     <name3></name3> </el>

результат:

name1 name2

не имя3

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

Группировка путем проверки вдоль оси родного брака показывает квадратичное (медленное) поведение, при группировке в xslt 1 почти всегда неплохо использовать ключ (известный как группировка по мюнхенскому алгоритму)

<xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


<xsl:template match="el">
 <xsl:for-each select="*[generate-id()=generate-id(key('n',name())[2])]">
  <xsl:value-of select="name()"/>
  <xsl:text> </xsl:text>
 </xsl:for-each>
</xsl:template>

<xsl:key name="n" match="*" use="name()"/>

</xsl:stylesheet>
0 голосов
/ 03 апреля 2012
./*[preceding-sibling::node()/name(.) != name(.)]
   [following-sibling::node()/name(.) = name(.)]/name(.)

Это находит все дочерние узлы, которые не имеют предшествующего брата с тем же именем (разные имена), но имеют следующего брата с тем же именем (более одного)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...