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
XSLT空XML值删除父端标记_Xml_Xslt - Fatal编程技术网

XSLT空XML值删除父端标记

XSLT空XML值删除父端标记,xml,xslt,Xml,Xslt,我对XSL转换有问题。我有一个密码: <span class="A"> <xsl:value-of select="FIELD_A" /> </span> <span class="B"> <xsl:value-of select="FIELD_B" /> </span> 我的浏览器将创建: <span class="A"> <span class="B"> VALUE B </sp

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

<span class="A"> <xsl:value-of select="FIELD_A" /> </span>
<span class="B"> <xsl:value-of select="FIELD_B" /> </span>
我的浏览器将创建:

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

B值
这是我的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">


您知道为什么要删除该范围的结束标记,以及如何修复它吗?

我想您没有正确的XSLT输出方法将HTML作为
text/HTML
,如果您想创建HTML并通过浏览器解析为
text/HTML
,请使用
。否则,XSLT处理器可能会将空的
span
元素序列化为
,然后HTML 5解析算法确实会将
foo
序列转换为两个嵌套的
span
元素,可在“实时DOM查看器”中查看

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

根据您的编辑,XSLT不会生成HTML4或5,而是生成XHTML(正如名称空间声明
所示)。你有必要这么做吗?XSLT1要生成
text/html
,就更容易避免对html元素使用任何名称空间。如果使用XSLT 2或3处理器(例如,可以在Java下使用Saxon 9),那么如果需要名称空间,但希望浏览器将结果解析为
文本/html
,则可以将输出方法更改为


如果您需要名称空间并需要使用XSLT 1,那么我建议使用
,但要确保浏览器以
应用程序/xhtml+xml
的形式获取内容,而不是以
文本/html
的形式获取内容。但是,许多使用旧的
文档的脚本库。write
和其他东西在解析为XML的XHTML中不起作用,因此这种方法有其缺陷,这取决于结果文档使用的其他资源,如Javascript代码。

我猜您没有正确的XSLT输出方法将HTML作为
文本/HTML
,如果您希望创建HTML,并通过浏览器将其解析为
文本/HTML
,请使用
。否则,XSLT处理器可能会将空的
span
元素序列化为
,然后HTML 5解析算法确实会将
foo
序列转换为两个嵌套的
span
元素,可在“实时DOM查看器”中查看

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

根据您的编辑,XSLT不会生成HTML4或5,而是生成XHTML(正如名称空间声明
所示)。你有必要这么做吗?XSLT1要生成
text/html
,就更容易避免对html元素使用任何名称空间。如果使用XSLT 2或3处理器(例如,可以在Java下使用Saxon 9),那么如果需要名称空间,但希望浏览器将结果解析为
文本/html
,则可以将输出方法更改为



如果您需要名称空间并需要使用XSLT 1,那么我建议使用
,但要确保浏览器以
应用程序/xhtml+xml
的形式获取内容,而不是以
文本/html
的形式获取内容。但是许多使用旧的
document.write
和其他东西的脚本库在解析为XML的XHTML中不起作用,因此这种方法有其缺陷,这取决于结果文档使用的Javascript代码等其他资源。

那么,在特定浏览器中是否存在HTML解析问题?到底是哪个浏览器?您是在浏览器中还是在服务器上运行XSLT?在“您的”浏览器操作之前,您到底使用哪种
xsl:output
方法,XSLT处理器输出的HTML结果是什么样子的?在Chrome、Firefox和Edge中的输出是相同的。XSLT正在服务器上运行
xsl:output
方法设置为
HTML
。我不知道我的浏览器是否在操纵它——这只是我的猜测。我已经检查过了,在浏览器操纵html之前,那里有一个自关闭的span标记:
您是在浏览器中还是在服务器上运行XSLT转换?如果在服务器上,请查看在发送到浏览器之前生成的实际文件。@MichaelKay在被浏览器解析之前,存在自关闭的span标记。因此,在特定浏览器中,这是HTML解析问题吗?到底是哪个浏览器?您是在浏览器中还是在服务器上运行XSLT?在“您的”浏览器操作之前,您到底使用哪种
xsl:output
方法,XSLT处理器输出的HTML结果是什么样子的?在Chrome、Firefox和Edge中的输出是相同的。XSLT正在服务器上运行
xsl:output
方法设置为
HTML
。我不知道我的浏览器是否在操纵它——这只是我的猜测。我已经检查过了,在浏览器操纵html之前,那里有一个自关闭的span标记:
您是在浏览器中还是在服务器上运行XSLT转换?如果在服务器上,请查看在发送到浏览器之前生成的实际文件。@MichaelKay在被浏览器解析之前,有一个自关闭的span标记。我已将XSLT头添加到顶部的帖子中。我正在使用
javax.xml.transform.Transformer
来转换xml。@bartex9,请参阅编辑,带有名称空间(任何名称空间)您打开
html
根目录,XSLT处理器将不使用XML元素对这些元素的html序列化规则。相关:您可以通过在运行时填充空白来欺骗MS XslCompiledTransform引擎为XML创建关闭标记。看@MartinHonnen你当然是对的。删除该名称空间解决了这个问题。我已经将XSLT头添加到顶部的帖子中。我正在使用
javax.xml.transform.Transformer
来转换xml。@bartex9,请参阅编辑,并在
ht上添加名称空间(任何名称空间)
<span class="A">
     <span class="B"> VALUE B </span>
</span>
<?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">