Ошибка XSLT по неизвестной причине в xsl: value-of - PullRequest
0 голосов
/ 27 сентября 2010

Я пытался создать шаблон xslt, но он продолжает молчать, как будто происходит исключение, но оно не перехватывается.Закрывающая скобка не записывается, что делает вывод недействительным;

файл XML

<?xml version="1.0"?>
<gallery>
    <item>
        <file>IMAGEHEADER1.jpg</file>
        <thelink>michaeljackson123.htm</thelink>
    </item>
    <item>
        <file>IMAGEHEADER2.jpg</file>
        <thelink>barrywhite456.htm</thelink>
    </item>
</gallery>

Файл XSLT

    <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <html>
            <body>
                <table>
                    <tr>
                        <xsl:apply-templates />
                    </tr>
                </table>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="gallery">
        <xsl:for-each select="item">
            <xsl:value-of select="position()"/>
            <xsl:choose>
                <xsl:when test="position() = 1">
                    <td rowspan="2" height="122" width="510">
                        <xsl:apply-templates select="." />
                    </td>
                </xsl:when>
            </xsl:choose>
        </xsl:for-each>
    </xsl:template>
    <xsl:template match="item">
        <a style="display:block;width:520px;height:330px" id="categorylink">
            <xsl:attribute name="href">
                <xsl:value-of select="thelink"/>
            </xsl:attribute>
            <xsl:apply-templates select="file" />
        </a>
    </xsl:template>
    <xsl:template match="file">
        <img alt="">
            <xsl:attribute name="src">
                <xsl:value-of select="."/>
            </xsl:attribute>
        </img>
    </xsl:template>
</xsl:stylesheet>

Недопустимый вывод, отсутствует закрывающая вкладка.

<html>
<body>
<tr>1<td rowspan="2" height="122" width="510"><a style="display:block;width:520px;height:330px" id="categorylink" href="michaeljackson123.htm"><img alt="" src="IMAGEHEADER1.jpg"></a></td>2</tr>
</body>
</html>

Мой ожидаемый вывод:

<html>
    <body>
        <table>
            <tr>1
                <td rowspan="2" height="122" width="510">
                    <a style="display:block;width:520px;height:330px" id="categorylink" href="michaeljackson123.htm">
                        <img alt="" src="IMAGEHEADER1.jpg"></img>
                    </a>
                </td>2
            </tr>
        </table>
    </body>
</html>

Пожалуйста, помогите, не могу понять, почему он не работает.

Ответы [ 3 ]

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

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

<xsl:output method="xml"/>

Я думаю, что ваш метод сериализации находится в автоматическом режиме, когда он видит элемент html впространство имен по умолчанию (не xhtml), которое по умолчанию используется для сериализации html, в котором не требуется закрывать пустые теги.

1 голос
/ 27 сентября 2010

Это связано с тем, что различия между сериализацией HTML и XML:

В вашей таблице стилей по умолчанию используется сериализация HTML, поскольку вашим корневым элементом является html.В этом случае все объявленные DTD пустые элементы выводятся так, как предполагается:

<img alt="" src="IMAGEHEADER1.jpg">

Если вы хотите сериализацию XML, вы должны объявить:

<xsl:output method="xml"/>

Тогда ваш вывод будет:

<html>
    <body>
        <table>
            <tr>1
                <td rowspan="2" height="122" width="510">
                    <a style="display:block;width:520px;height:330px" id="categorylink" href="michaeljackson123.htm">
                        <img alt="" src="IMAGEHEADER1.jpg" />
                    </a>
                </td>2
            </tr>
        </table>
    </body>
</html>
1 голос
/ 27 сентября 2010

Как вы смотрите на вывод? Закрывающий тег элемента img не требуется в HTML, поэтому, если вы смотрите на него в веб-браузере, часто браузер отображает что-то немного отличающееся от его буквального ввода. По крайней мере, я заметил это с помощью отладчика Firebug / Chrome.

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