XSLT: превращается в не-XML контент? - PullRequest
6 голосов
/ 01 мая 2010

Можно ли использовать XSLT для преобразования XML в нечто иное, чем 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>

Ответы [ 3 ]

8 голосов
/ 01 мая 2010

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

Однако, если вы выводите 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')
4 голосов
/ 01 мая 2010

Независимо от того, как вы создаете свои теги 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>
1 голос
/ 01 мая 2010

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

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