是否可以使用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 IMG
和BR
标记中禁止拥有结束标记。这与 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>
答案 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元素。