是否可以使用XSLT将XML转换为XML以外的其他东西?
例如,我想要最终的非xml内容:
<Content>
<image url="file1.png">
<image url="file2.png">
...
<image url="filen.png">
<EndContent>
Run Code Online (Sandbox Code Playgroud)
你注意到这个文件不是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>
Run Code Online (Sandbox Code Playgroud)
您会注意到此文档是HTML,因为在HTML IMG和BR标签中禁止使用结束标记.这与使用xml重构HTML的xhtml有关,其中所有元素都需要有一个结束标记(因为在xml中每个标记都必须关闭).
另一个非xml输出的例子可能是:
INSERT INTO Documents (Filename) VALUES ('file1.png')
INSERT INTO Documents (Filename) VALUES ('file2.png')
...
INSERT INTO Documents (Filename) VALUES ('file3.png')
Run Code Online (Sandbox Code Playgroud)
我可以组成我喜欢的任何源xml,但一个例子可能是:
来源xml:
<DocumentStore>
<Document type="image">file1.png</Document>
<Document type="image">file2.png</Document>
<Document type="image">filen.png</Document>
</DocumentStore>
Run Code Online (Sandbox Code Playgroud)
也许:
<Profiles>
<User avatar="file1.png" />
<User avatar="file2.png" />
<User avatar="filen.png" />
</Profiles>
Run Code Online (Sandbox Code Playgroud)
您可以使用<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>
Run Code Online (Sandbox Code Playgroud)
所以不太确定为什么你不想把结束标签,除非我遗漏了什么.
更新:添加了非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>
Run Code Online (Sandbox Code Playgroud)
这个输入xml: -
<?xml version="1.0" encoding="UTF-8"?>
<filenames>
<filename>file1.png</filename>
<filename>file2.png</filename>
<filename>file3.png</filename>
</filenames>
Run Code Online (Sandbox Code Playgroud)
你得到这样的输出: -
INSERT INTO Documents (Filename) VALUES ('file1.png')
INSERT INTO Documents (Filename) VALUES ('file2.png')
INSERT INTO Documents (Filename) VALUES ('file3.png')
Run Code Online (Sandbox Code Playgroud)
无论您如何创建 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>
Run Code Online (Sandbox Code Playgroud)
输出方法“html”将导致 IMG 标签不被关闭。
<HTML>
<BODY><IMG src="file1.png"><IMG src="file2.png"><IMG src="filen.png"></BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)