Xml 如何在XSLT中呈现具有属性的自动关闭HTML标记?
我想呈现一个自动关闭标记,比如Xml 如何在XSLT中呈现具有属性的自动关闭HTML标记?,xml,xslt,Xml,Xslt,我想呈现一个自动关闭标记,比如 但我不知道怎么做…我的意思是如何呈现一个自动关闭标签。 到目前为止,我的情况如下:- 以下是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">
但我不知道怎么做…我的意思是如何呈现一个自动关闭标签。
到目前为止,我的情况如下:-
以下是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>
.
.
.
.
.
.
.
.
.
感谢您的帮助。
<xsl:output method="html" version="4.0" />
我可以做你想做的事。您甚至可以包括doctype system
和doctype public
属性来输出特定的HTML doctype。看
如果您不想输出HTML,而想输出XML,恐怕您有点不知所措。
和
在语义上是等价的,XSLT处理器可以选择她的变体。你不应该太在意。
<xsl:output method="html" />
如果这有帮助的话,试试看有一种肮脏的方法:“愚弄”处理器并生成字符串
<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>
img src=”
" /
好的,我同意这是一个可怕的技巧,但它适用于所有过程。XSLT不是为生成多语言文档而设计的
<xsl:output method="html" />
将始终生成
<img src="xyz.jpg">
没有结束斜杠
<xsl:output method="xml" />
可能产生
<img src="xyz.jpg" />
或
取决于处理器
事实上,浏览器对其中任何一个都会做正确的事情,但是将xslt生成的xhtml发送到文本/html内容类型的浏览器可能会导致问题,因为很容易生成非空元素(如等)的标记,而浏览器会误解这些标记,从而导致严重的渲染问题
您必须决定是否要生成html或xhtml,并使用适当的内容类型发送(应用程序/xhtml+xml for xhtml-IE不支持),或者对xslt输出进行后期处理,以确保自动关闭标记仅用于规范性空元素。如果您有xslt 2.0处理器,则可以为输出方法指定XHTML,该方法应正确序列化img元素
<xsl:output method="xhtml" />
给定一个XHTML元素,其内容
模型为空,序列化程序必须
例如,使用最小化标记语法
示例
,作为替代方案
XML允许的语法
不确定的结果导致许多现有的问题
用户代理。序列化程序必须
在尾随前包含一个空格
/>
,例如
,
和
抱歉…没有提到问题的一个重要组成部分。我现在已经把它包括在问题中了。现在有什么想法吗?在本例中,我想说它也依赖于XSLT处理器。当使用msxsl.exe进行测试时,
标记以隐式关闭的形式输出-不生成
,并且不生成
。顺便说一句,省略xml声明与方法=“html”
是多余的。是的,我的硬件XSLT加速器也会关闭标记。Tomalak是对的,它依赖于进程。它已经存在于我的代码中。很抱歉没有在这里提及。我确实编辑了我的问题……现在有什么想法……不,它不适用于所有处理器。禁用输出转义的实现对于XSLT处理器来说是可选的。你是对的,但我还没有遇到不支持此功能的“主流”处理器。你知道吗?我以前用过一个,但现在不记得是什么了。我不知道现在有什么在用。我还没有对此进行测试,但我想知道如果在浏览器中应用XSLT,它是否会工作,因为要工作,输出必须序列化并重新解析,而不是直接将输出树变成DOM。你知道它是否适用于所有知名的浏览器吗?感谢上帝,你自己添加了它,这是一种肮脏的方式,否则你可能会得到很多反对票!实际上,禁用输出转义
是一个非常可怕的特性,而且很容易被滥用,因此在XSLT 2.0中被认真考虑删除,并且仅出于向后兼容的原因才保留该特性:
<xsl:output method="xhtml" />