Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何在XSLT中呈现具有属性的自动关闭HTML标记?_Xml_Xslt - Fatal编程技术网

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">&lt;img src="</xsl:text>
  <xsl:value-of select="@src" />
  <xsl:text disable-output-escaping="yes">" /&gt;</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" />