Проблема вывода XSLT HTML с - PullRequest
2 голосов
/ 27 мая 2009

Проблема в том, что мой процесс XSLT-преобразования (называемый .NET) не оставляет содержимое HTML в файле XSLT в одиночку (который не совместим с XML, как тег <img>, без закрывающей косой черты -sign), так что я получу ошибки вроде:

<code><pre>System.Xml.Xsl.XslLoadException: XSLT-Compilererror. ---> System.Xml.XmlException:
The 'img'-Starttag in Line XY does'nt match with the Endtag of 'td'.

Как я могу предотвратить это?

Я бы хотел, чтобы XSLT-процессор либо игнорировал весь контент, который не является элементом "", либо просто заставлял его распознавать действительные html-теги ..

Мой XSL-заголовок выглядит следующим образом (скопировано из C #, поэтому представьте, что дополнительного «там нет»):

"<xsl:stylesheet version=\"2.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" " +
"xmlns:html=\"http://www.w3.org/1999/xhtml\" xmlns=\"http://www.w3.org/1999/xhtml\" " +
"exclude-result-prefixes=\"html\">" +
"<xsl:output method=\"xhtml\" omit-xml-declaration=\"yes\" indent=\"yes\"/>" +
"<xsl:preserve-space elements=\"*\" />"

Ответы [ 4 ]

2 голосов
/ 27 мая 2009

AFAIK, нет никакого способа обойти это. XSLT является реализацией XML, и содержимое документа XSLT должно соответствовать стандартам XML для компиляции.

Исправьте HTML в формат XHTML.

1 голос
/ 27 мая 2009

Вы должны либо сделать HTML-код внутри XSLT-XML-совместимого (который все еще является действительным HTML-кодом), либо, если вам действительно нужно, чтобы HTML-код не был XML-совместимым, инкапсулировать HTML-код в блок CDATA.

Например:

<xsl:template .... >
    <![CDATA[
        <img src='...' >
    ]]>
</xsl:template>

Обратите внимание, что это очень уродливо, и вам, вероятно, было бы лучше сделать свой HTML XML-совместимым.

0 голосов
/ 27 мая 2009

XHTML означает, что имя X подразумевает теги XML img или любые другие закрытые теги, не соответствующие XHTML-строгим. Однако для легкого перехода с HTML на XHTML доступно несколько уровней «строгой» готовности, некоторые из которых не совместимы с XML.

если вы переписываете свой HTML в строгий XHTML, у вас не возникнет проблем

0 голосов
/ 27 мая 2009

Что вы хотите вывести? HTML или XHTML? Вы всегда пишете xslt как действительный xml:

<img src="somepath" ... />

или

<img src="somepath{withvalues}" ... />

Но вы используете xsl:output для управления им; если вы хотите html (т.е.), то вы бы использовали:

<xsl:output method="html" ... />

(обратите внимание, нет "x" в выше) - или:

<xsl:output method="xml" ... />

AFAIK, "xhtml" не является допустимым параметром для xsl:output/@method, поскольку он уже покрыт "xml". Вам также следует обратить внимание на тонкое поведение по умолчанию, если вы не указываете xsl:output/@method, зависит от верхнего элемента (т.е. начинается ли он <html>...</html> или нет).

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