XSLT:转换为非xml内容?

Ian*_*oyd 6 html xslt

是否可以使用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 IMGBR标签中禁止使用结束标记.这与使用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)

Ala*_*han 8

您可以使用<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)


Dar*_*ler 5

无论您如何创建 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)