Найти все уникальные первые узлы xml под родительским узлом, используя xslt - PullRequest
2 голосов
/ 18 января 2011

Я xsl n00b и пытаюсь найти все уникальные узлы xml в узле <section>

Вот мой код:

<section>
   <books>
     <book>
       <title>Child 44</title>
       <author>Thomas Rob Smith</author>
       <price>5.00</price>
     </book>
     <book>
       <title>Atlas Shrugged</title>
       <author>Ayn Rand</author>
       <price>7.00</price>
     </book>
   </books>
   <cds>
     <cd>
       <title>A Passage in time</title>
       <band>Authority Zero</band>
       <price>10.00</price>
      </cd>
   </cds>
</section>

Вот мой желаемый вывод:

books
cds

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 18 января 2011

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:strip-space elements="*"/>
 <xsl:output method="text"/>

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

 <xsl:template match=
  "/*/*[generate-id()=generate-id(key('kElByName',name())[1])]">
  <xsl:value-of select="concat(name(),'&#xA;')"/>
 </xsl:template>
</xsl:stylesheet>

при применении к предоставленному XML-документу :

<section>
    <books>
        <book>
            <title>Child 44</title>
            <author>Thomas Rob Smith</author>
            <price>5.00</price>
        </book>
        <book>
            <title>Atlas Shrugged</title>
            <author>Ayn Rand</author>
            <price>7.00</price>
        </book>
    </books>
    <cds>
        <cd>
            <title>A Passage in time</title>
            <band>Authority Zero</band>
            <price>10.00</price>
        </cd>
    </cds>
</section>

создает искомое, верный результат :

books
cds

Обратите внимание : используется метод Munchian для группировки .Это, вероятно, самый эффективный метод группировки для XSLT 1.0.

0 голосов
/ 18 января 2011
/section/*[not(name(.)=name(preceding-sibling::*)) and not(name(.)=name(following-sibling::*))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...