Использование xsl: if не включает закрывающий тег - PullRequest
1 голос
/ 11 февраля 2011

Попытка использовать следующий код для вставки рекламы Google внутри рулона блога

<xsl:if test="position() = 3">
    <object data="/frontpage_blogroll_center_top_728x90" 
            width="735" 
            height="95"  ></object>
</xsl:if>  

По какой-то причине закрывающий тег </object> не отображается в HTML и вызывает ошибку. Есть ли способ решить эту проблему?

Ответы [ 2 ]

4 голосов
/ 11 февраля 2011

В XML нет разницы (кроме лексической) между :

<object></object>

и

<object/>

Они представляют собой один и тот же элемент XML и разныеПроцессоры XSLT бесплатны в зависимости от того, какое из представленных выше двух представлений они выберут.

Если в HTML действительно нужна длинная форма элемента, это можно сделать с помощью :

  • Использование <xsl:output method="xhtml"/>.Метод xhtml доступен только в XSLT 2.0.

  • Использование <xsl:output method="html"/>.Результатом преобразования XSLT будет HTML-документ (не XML).

  • Использование трюка, например:

    <object data="/frontpage_blogroll_center_top_728x90" width="735" height="95"  >
      <xsl:value-of select="$vsomeVar"/>
    </object>
    

, где$vsomeVar не имеет значения и не приведет к выводу чего-либо, но заставит процессор XSLT думать, что было выводом, и, следовательно, выводить длинную форму элемента.

2 голосов
/ 11 февраля 2011

Использовать html метод вывода.

Эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html"/>
    <xsl:template match="/">
        <xsl:if test="true()">
            <object data="/frontpage_blogroll_center_top_728x90"
                    width="735"
                    height="95"  ></object>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

Вывод:

<object height="95" 
        width="735" 
        data="/frontpage_blogroll_center_top_728x90"></object>

Протестировано с MSXSL, Xalan, Oracle, Saxon, Altova, XQSharp.

...