XSLT:转换为非xml内容?

时间:2010-05-01 11:54:25

标签: html xslt

是否可以使用XSLT将XML转换为XML以外的其他内容?

e.g。我想要最终的非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 IMGBR标记中禁止拥有结束标记。这与 xhtml 一致,即使用xml重新构造HTML,其中所有元素都需要有一个结束标记(因为在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 个答案:

答案 0 :(得分: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')

答案 1 :(得分: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>

答案 2 :(得分:1)

是的,您可以使用样式表中的xsl:output元素。