2010-05-01 1 views
6

Возможно ли использовать XSLT для преобразования XML в нечто иное, чем XML?XSLT: преобразование в не-xml-контент?

например. Я хочу, чтобы конечный не-XML содержание:

<Content> 
    <image url="file1.png"> 
    <image url="file2.png"> 
    ... 
    <image url="filen.png"> 
<EndContent> 

Ты уведомление этот документ не является XML (или даже HTML), но у него есть <elements>.

Возможно ли, используя XSLT, генерировать выходные данные не-xml?


Другой пример вывода не-XML может быть:

<HTML> 
<BODY> 
    <IMG src="file1.png"><BR> 
    <IMG src="file2.png"><BR> 
    ... 
    <IMG src="filen.png"><BR> 
</BODY> 
</HTML> 

Вы заметите этот документ является HTML, потому что в HTML IMG и BR теги запрещенный от того, закрывающий тег. Это согласуется с xhtml, переформулировкой HTML с использованием xml, где все элементы необходимы из закрывающего тега (потому что в xml каждый тег должен быть закрыт).


Другой пример вывода не-XML может быть:

INSERT INTO Documents (Filename) VALUES ('file1.png') 
INSERT INTO Documents (Filename) VALUES ('file2.png') 
... 
INSERT INTO Documents (Filename) VALUES ('file3.png') 

я могу сделать любой источник XML я люблю, но один из примеров может быть:

Источник XML:

<DocumentStore> 
    <Document type="image">file1.png</Document> 
    <Document type="image">file2.png</Document> 
    <Document type="image">filen.png</Document> 
</DocumentStore>  

Или возможно:

<Profiles> 
    <User avatar="file1.png" /> 
    <User avatar="file2.png" /> 
    <User avatar="filen.png" /> 
</Profiles> 
+0

Что случилось с '' и ''
? – kennytm

+0

@KennyTM: HTML запрещает закрывать теги на IMG и BR. Дело не в том, что закрывающие теги оскорбительны. Это просто, что правильный HTML не будет иметь их. –

ответ

1

Да, вы можете с помощью элемента xsl:output в вашей таблице стилей.

8

Вы можете использовать <xsl:output>, чтобы указать формат вывода, который не должен быть xml, см. this reference page.

Однако, если вы вывода HTML, ни один современный браузер не должен жаловаться, даже если вы поставить закрывающие теги, поэтому, используя ваш пример выше, я считаю, что все браузер должен быть в порядке с: -

<HTML> 
<BODY> 
    <IMG src="file1.png"></IMG><BR></BR> 
    <IMG src="file2.png"></IMG><BR></BR> 
    ... 
    <IMG src="filen.png"></IMG><BR></BR> 
</BODY> 
</HTML> 

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


Обновление: Добавлен пример отсутствия вывода XML

Учитывая эту таблицу стилей: -

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:template match="/filenames"> 

    <xsl:for-each select="filename"> 
    INSERT INTO Documents (Filename) VALUES ('<xsl:value-of select="." />') 
    </xsl:for-each> 

    </xsl:template> 
</xsl:stylesheet> 

и этот входной XML: -

<?xml version="1.0" encoding="UTF-8"?> 
<filenames> 
    <filename>file1.png</filename> 
    <filename>file2.png</filename> 
    <filename>file3.png</filename> 
</filenames> 

Вы получаете выход как это: -

INSERT INTO Documents (Filename) VALUES ('file1.png') 

INSERT INTO Documents (Filename) VALUES ('file2.png') 

INSERT INTO Documents (Filename) VALUES ('file3.png') 
+0

@ Алан Чан: Это не столько генерация недопустимого HTML, с которым могут работать браузеры; он генерирует корректный HTML, чтобы синтаксические анализаторы могли его обрабатывать. –

+0

@Ian: Ок, я вижу. Ну, если вы используете , чтобы указать, что вывод является html, а затем используйте для создания тегов html ... например. file1.png, тогда процессор xslt должен вызывать ,
и т. д. теги без закрывающего тега, как требуется для html. –

4

Независимо от того, как вы создаете ваши теги IMG,

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html"/> 
<xsl:template match="/"> 
<HTML> 
<BODY> 
    <xsl:element name="IMG"> 
    <xsl:attribute name="src">file1.png</xsl:attribute> 
    </xsl:element> 
    <IMG src="file2.png"></IMG> 
    <IMG src="filen.png"/> 
</BODY> 
</HTML> 
</xsl:template> 
</xsl:stylesheet> 

Выходной метод «HTML» заставит теги IMG не должны быть закрыты.

<HTML> 
<BODY><IMG src="file1.png"><IMG src="file2.png"><IMG src="filen.png"></BODY> 
</HTML> 
+0

Когда я воспроизвожу это, включаются теги закрытия. В то же время я иногда могу включить необязательные закрывающие теги, и иногда я не хочу этого делать. XSLT должен иметь возможность преобразовать xml в мой ** желаемый формат вывода. –

Смежные вопросы