xsl нежелательный следующий элемент - чтение атрибутов из тега и под тега - PullRequest
0 голосов
/ 21 сентября 2010

На этот раз я очень близко подошел;)

Ниже приведено:

  1. мой xsl-скрипт
  2. мой xml-файл (который вызывает скрипт)

  3. выход манипуляции с xsl на xml (как и должно быть)

Моя проблема в том, что пока href и srcзначение должно быть одинаковым, между ними всегда одна картинка (pic3 и pic4), как будто я вызываю следующий элемент pic ... но я не понимаю, где я это делаю?

 <xsl:for-each select="data/pics/pic">
        <div>                   
            <a>
                <xsl:attribute name="href">
                    <xsl:value-of select="@href" />
                </xsl:attribute>
                <img>
                    <xsl:attribute name="src">
                        <xsl:value-of select="@src" />
                    </xsl:attribute>

                </img>
            </a>
        </div>
    </xsl:for-each>

Иэто мой xml

<data>
    <pics>
        <pic href="pics\pic05.jpg" src="pics\pic05.jpg"></pic>
        <pic href="pics\pic04.jpg" src="pics\pic04.jpg"></pic>
        <pic href="pics\pic03.jpg" src="pics\pic03.jpg"></pic>
        <pic href="pics\pic02.jpg" src="pics\pic02.jpg"></pic>
        <pic href="pics\pic01.jpg" src="pics\pic01.jpg"></pic> 
    </pics> 
</data> 

это должен быть вывод:

<div>
    <a href="pics\pic01.jpg">
        <img src="pics\pic01.jpg">
    </a>
</div>
<div>
    <a href="pics\pic02.jpg">
        <img src="pics\pic02.jpg">
    </a>
</div>
<div>
    <a href="pics\pic03.jpg">
        <img src="pics\pic03.jpg">
    </a>
</div>
<div>
    <a href="pics\pic04.jpg">
        <img src="pics\pic04.jpg">
    </a>
</div>
<div>
    <a href="pics\pic05.jpg">
        <img src="pics\pic05.jpg">
    </a>
</div>

1 Ответ

2 голосов
/ 21 сентября 2010

В используемом вами процессоре XSLT может быть ошибка, или вы не предоставили реальный код xslt и документ xml.

Предоставленный фрагмент кода XSLT при включении в полную таблицу стилей :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
 <xsl:template match="/">
  <html>
     <xsl:for-each select="data/pics/pic">
            <div>
                <a>
                    <xsl:attribute name="href">
                        <xsl:value-of select="@href" />
                    </xsl:attribute>
                    <img>
                        <xsl:attribute name="src">
                           <xsl:value-of select="@src" />
                        </xsl:attribute>
                    </img>
                </a>
            </div>
        </xsl:for-each>
  </html>
 </xsl:template>
</xsl:stylesheet>

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

<data>
    <pics>
        <pic href="pics\pic05.jpg" src="pics\pic05.jpg"></pic>
        <pic href="pics\pic04.jpg" src="pics\pic04.jpg"></pic>
        <pic href="pics\pic03.jpg" src="pics\pic03.jpg"></pic>
        <pic href="pics\pic02.jpg" src="pics\pic02.jpg"></pic>
        <pic href="pics\pic01.jpg" src="pics\pic01.jpg"></pic>
    </pics>
</data>

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

<html>
    <div>
        <a href="pics\pic05.jpg">
            <img src="pics\pic05.jpg"/>
        </a>
    </div>
    <div>
        <a href="pics\pic04.jpg">
            <img src="pics\pic04.jpg"/>
        </a>
    </div>
    <div>
        <a href="pics\pic03.jpg">
            <img src="pics\pic03.jpg"/>
        </a>
    </div>
    <div>
        <a href="pics\pic02.jpg">
            <img src="pics\pic02.jpg"/>
        </a>
    </div>
    <div>
        <a href="pics\pic01.jpg">
            <img src="pics\pic01.jpg"/>
        </a>
    </div>
</html>

Это преобразование дало тот же результат при выполнении с несколькими различными процессорами XSLT , такими как MSXML3,4,6, Saxon6.5 и AltovaXML (XML-SPY).

Обратите внимание , что преобразование может быть преобразовано в гораздо более короткое и читаемое:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
 <xsl:template match="/">
  <html>
     <xsl:for-each select="data/pics/pic">
            <div>
                <a href="{@href}">
                    <img src="{@src}"/>
                </a>
            </div>
        </xsl:for-each>
  </html>
 </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...