代码之家  ›  专栏  ›  技术社区  ›  bartex9

XSLT空XML值删除父结束标记

  •  0
  • bartex9  · 技术社区  · 6 年前

    我对XSL转换有问题。我有个密码:

    <span class="A"> <xsl:value-of select="FIELD_A" /> </span>
    <span class="B"> <xsl:value-of select="FIELD_B" /> </span>
    

    当存在值时,上述代码的输出是正确的:

    <span class="A"> VALUE A </span>
    <span class="B"> VALUE B </span>
    

    问题是缺少某些值。如果 FIELD_A 为空,则输出HTML为:

    <span class="A" />
    <span class="B"> VALUE B </span>
    

    我的浏览器会创建:

    <span class="A">
         <span class="B"> VALUE B </span>
    </span>
    

    这是我的xslt文件的头

    <?xml version="1.0" encoding="ISO-8859-2" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>
    <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
    

    1 回复  |  直到 6 年前
        1
  •  2
  •   Martin Honnen    6 年前

    我猜您没有正确的XSLT输出方法来作为HTML text/html <xsl:output method="html"/> 如果您想创建HTML来解析为 通过浏览器。否则,XSLT处理器可能会序列化空的 span 元素为 <span/> 然后HTML5解析算法确实改变了 <span class="A"/><span class="B">foo</span> 分成两个嵌套的 元素,可在“live DOM viewer”中查看 your example .

    如果你有 xsl:output method="html" 但是如果没有得到正确的解析,那么要么不让XSLT处理器序列化XSLT转换结果,要么就涉及到名称空间。

    根据您的编辑,XSLT不会生成HTML4或5,而是生成XHTML(作为名称空间声明) <html xmlns="http://www.w3.org/1999/xhtml"> 表示)。你有必要这么做吗?让XSLT1产生 文本/html <xsl:output method="xhtml"/> 如果需要名称空间,但希望将结果解析为 文本/html 通过浏览器。

    <xsl:output method="xml"/> 但是为了确保浏览器能以 application/xhtml+xml ,而不是 . 但是许多脚本库使用旧的 document.write 其他的东西在解析为XML的XHTML中不起作用,所以这种方法有其缺陷,这取决于结果文档使用的Javascript代码等其他资源。