好吧,我想渲染一个自我结束标记,说<img>
这样的标记<img src="xyz.jpg" />
但我不知道该怎么做...我的意思是如何渲染一个自我关闭的标签。 到目前为止我所拥有的是: -
这是XML:
<c:Image src="xyz.jpg"></c:Image>
这是XSLT:
<xsl:output indent="yes" omit-xml-declaration="yes" method="html" />
.
.
.
<xsl:for-each select="c:Image">
<img>
<xsl:attribute name="src">
<xsl:if test="string-length(@src)>0">
<xsl:text></xsl:text>
<xsl:value-of select="@src"/>
</xsl:if>
</xsl:attribute>
</img>
</xsl:for-each>
.
.
.
任何帮助表示感谢。
答案 0 :(得分:2)
如果你有一个XSLT 2.0处理器,你可以为输出方法指定XHTML,它应该正确地序列化 img 元素。
<xsl:output method="xhtml" />
http://www.w3.org/TR/xslt-xquery-serialization/#xhtml-output
给定一个XHTML元素的内容 model是EMPTY,序列化器必须 使用最小化的标记语法 示例
<br />
,作为替代方案 XML允许的语法<br></br>
给出 许多现有的不确定结果 用户代理。序列化器必须 在尾随之前包括一个空格/>
,例如<br />
,<hr />
和<img> src="karen.jpg" alt="Karen" />
答案 1 :(得分:1)
<xsl:output method="html" version="4.0" />
可以做你想做的事。您甚至可以包含doctype-system
和doctype-public
属性来输出特定的HTML DOCTYPE。请参阅documentation of <xsl:output>
。
如果你不想输出HTML,但是XML,你有点不知所措,我很害怕
<img></img>
和<img />
在语义上是等价的,XSLT处理器可以选择其他变体。你不应该太在乎。
答案 2 :(得分:1)
这有一种肮脏的方式:“愚弄”处理器并生成字符串
<xsl:for-each select="c:Image">
<xsl:text disable-output-escaping="yes"><img src="</xsl:text>
<xsl:value-of select="@src" />
<xsl:text disable-output-escaping="yes">" /></xsl:text>
</xsl:for-each>
好的,我同意这是一个可怕的伎俩,但它适用于所有过程。
答案 3 :(得分:1)
XSLT不是为生成多语言文档而设计的。
<xsl:output method="html" />
将始终生成
<img src="xyz.jpg">
没有结束斜线。
<xsl:output method="xml" />
可能会产生
<img src="xyz.jpg" />
或
<img src="xyz.jpg"></img>
取决于处理器。
事实上,浏览器会使用其中任何一种做正确的事情,但是将xslt生成的xhtml发送到具有text / html内容类型的浏览器可能会导致问题,因为非空元素的标记如&lt; title /&gt; ,&lt; script /&gt;,&lt; a /&gt;等,很容易产生哪些浏览器会误解导致严重的渲染问题。
您必须决定是否要生成html或xhtml,并使用适当的内容类型发送(适用于xhtml的application / xhtml + xml - IE中不支持),或者对xslt输出进行后处理以确保自我结束标记仅用于规范空元素。
答案 4 :(得分:0)
<xsl:output method="html" />
尝试这是否有帮助