Преобразование XML в HTML (в противоположность xhtml)

я хочу преобразовать некоторый xml в HTML, который имеет следующий формат:

col1 col2 col3

Примечание: Вывод HTML, вместе с дополнительными опущенными закрывающими тэгами. Это - проблема и причина, вопрос существует.

Отрывок XSL, который я использую:



    
   ...
     
      
   

Вы видите, что кишки XSL соответствуют моему желаемому HTML (перенесенный для легкого чтения):

  
      
       

Примечание: Те из Вас, кто знает ошибку, которую я получаю от XSLT: надо надеяться, уже знайте ответ.

При представлении с моим XSL (который, не забывайте, форма xml), я получаю нехорошо сформированную ошибку:

Конечный тэг 'TR' не соответствует тегу запуска 'TD'.

Это имеет смысл. Действительно:

 

я не закрываюсь TD элемент прежде, чем закрыться TR. Таким образом, вопрос:

Как я могу преобразовать xml в HTML, учитывая, что HTML не xml?

См. также


Обновите тот

Было предложено, чтобы можно было просто включать закрывающие тэги так или иначе, чтобы заставить XSL проверить (показанный перенесенный для легкого чтения):

    
        
           

затем, при помощи xsl:output method='html', заключительное содержимое HTML имело бы теги волшебно опущены. Кроме него не работает:

col1col2col3

Обновление два

Было предложено, чтобы я сдался, не потрудитесь задавать этот вопрос и просто включайте дополнительные закрывающие тэги. Это возможно, но это не мой вопрос. Кроме того, "решение" не работает на элементы, где закрывающий тэг запрещается, например:


или



Как я включал бы a
элемент в моем выводе HTML, учитывая, что запрещается в HTML закрыть a
элемент.

5
задан Community 23 May 2017 в 12:18
поделиться

4 ответа

Вот один из способов сделать это :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/*">
   &lt;TR>&lt;TD><xsl:value-of select="col1"/>&lt;TD><xsl:value-of select="col2"/>&lt;TD><xsl:value-of select="col3"/>&lt;/TR>
 </xsl:template>
</xsl:stylesheet>

Когда это преобразование применяется к следующему XML-документу :

<t>
 <col1>1</col1>
 <col2>2</col2>
 <col3>3</col3>
</t>

, желаемый результат получается правильно:

   <TR><TD>1<TD>2<TD>3</TR>
2
ответ дан 14 December 2019 в 18:56
поделиться

Вы пробовали вывод в формате HTML? Элементы, которые не должны самозакрываться в HTML, таковыми не являются (например,
, ).

Если вам по-прежнему не нравится, как механизм XSLT сериализирует вывод HTML, тогда вы можете установить и создайте нужный «HTML»:

&lt;TR>&lt;TD><xsl:value-of select="col1"/>&lt;TD><xsl:value-of select="col2"/>&lt;TD><xsl:value-of select="col3"/>&lt;/TR>

, который даст:

<TR><TD>col1<TD>col2<TD>col3</TR>  
1
ответ дан 14 December 2019 в 18:56
поделиться

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

Есть ли причина, по которой вам действительно не нужны дополнительные закрывающие теги в выводе?

Повторное обновление 2

С этим обновлением проблем нет. С method = "html"
будет выведен как
:

XSLT (примечание
) :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output 
doctype-system='http://www.w3.org/TR/html4/strict.dtd'
doctype-public='-//W3C//DTD HTML 4.01//EN'
indent='yes'
method='html'
/>

<xsl:template match="/">
<HTML><BODY>
    <TR>
        <xsl:apply-templates/>
    </TR>
    <BR/> <!-- HERE -->
</BODY></HTML>
</xsl:template>

<xsl:template match="item">
    <TD><xsl:value-of select="."/></TD>
</xsl:template>

</xsl:stylesheet>

Вход:

<root>
<item>one</item>
<item>two</item>
</root>

Выход (примечание
):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML><BODY>
<TR>
<TD>one</TD>
<TD>two</TD>
</TR>
<BR> <!-- HERE -->
</BODY></HTML>
2
ответ дан 14 December 2019 в 18:56
поделиться

Ян, вы пробовали ?

http://www.w3schools.com/xsl/el_output.asp

0
ответ дан 14 December 2019 в 18:56
поделиться