XSLT - соответствие атрибутов в группе и извлечение значений этих атрибутов - PullRequest
1 голос
/ 08 сентября 2011

У меня есть группа тегов с атрибутами, и я хочу добавить определенные значения в новую группу только после сопоставления атрибутов.

Входной файл выглядит так:

<content>
<manifest>
<item id="id1272682" href="ch01.html"/>
<item id="id1272759" href="ch02.html"/>
</manifest>
<spine>
<itemref idref="id1272759"/>
<itemref idref="id1273380"/>
</spine>
</content>

Я хочу, чтобы мой XSLT искал в позвоночнике любые значения itemref / @ idref (их может быть больше одного), которые соответствуют элементу / @ id в манифесте, и добавил это значение в позвоночник, чтобы выходные данные выглядели как это:

<spine>
<itemref idref="id1272759"/>
</spine>

Вот что я имею до сих пор. Похоже, что оператор if: работает, так как я получаю правильное количество тегов itemref, но не получаю значение idref.

<xsl:if test="itemref[attribute::idref = ../../manifest/item/@id]">
                             <xsl:element name="itemref">
                                 <xsl:attribute name="idref">
                                     <xsl:value-of select="@idref"/>
                                 </xsl:attribute>
                             </xsl:element>
                             </xsl:if>

И мой вывод:

<spine>
  <itemref idref=""/>
</spine>

1 Ответ

0 голосов
/ 08 сентября 2011

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

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="spine">
     <spine>
       <xsl:copy-of select="itemref[@idref = /*/manifest/item/@id]"/>
     </spine>
 </xsl:template>
</xsl:stylesheet>

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

<content>
    <manifest>
        <item id="id1272682" href="ch01.html"/>
        <item id="id1272759" href="ch02.html"/>
    </manifest>
    <spine>
        <itemref idref="id1272759"/>
        <itemref idref="id1273380"/>
    </spine>
</content>

дает желаемый, правильный результат :

<spine>
   <itemref idref="id1272759"/>
</spine>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...