Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.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
如何在XSL转换中解释属性中的HTML标记?_Html_Xml_Xslt_Cdata - Fatal编程技术网

如何在XSL转换中解释属性中的HTML标记?

如何在XSL转换中解释属性中的HTML标记?,html,xml,xslt,cdata,Html,Xml,Xslt,Cdata,我有一个现有的函数转换,它将数据XML文件转换成漂亮的HTML文档 现在我想强调一些特殊条件下的数据。我的第一个想法是使用一些HTML标记。 它在一定程度上起作用 第一个重要步骤是在XSLT文件中转换后启用HTML解释 <xsl:value-of select="$title" disable-output-escaping="yes"/> 但这不会解释,它会在转换中显示HTML标记witzh或不带disable output escaping=“yes”。我估计解码标签的时间太晚

我有一个现有的函数转换,它将数据XML文件转换成漂亮的HTML文档

现在我想强调一些特殊条件下的数据。我的第一个想法是使用一些HTML标记。 它在一定程度上起作用

第一个重要步骤是在XSLT文件中转换后启用HTML解释

<xsl:value-of select="$title" disable-output-escaping="yes"/>
但这不会解释,它会在转换中显示HTML标记witzh或不带disable output escaping=“yes”。我估计解码标签的时间太晚了

有什么想法吗?我真的很感激你能提供的任何帮助

我认为,问题在于数据。虽然标记中的文本可以用CDATA表示

<title><![CDATA[<b>Title</b>]]></title>
<title><![CDATA[<b>Title</b>]]></title>
哎哟,你是说你把XML作为文本放在属性中?如果你能阻止。。。你会省去很多麻烦的。XML中的属性包含平面值,而不是结构化内容

但这不会解释,它会在转换中显示HTML标记witzh或不带disable output escaping=“yes”。我估计解码标签的时间太晚了

我不认为你的意思是“它显示…在转换中”,因为转换没有显示任何东西。你的意思是当它在浏览器中以HTML格式打开时的显示方式吗

不,解码还来得及解释<代码>禁用输出转义仅对元素内的文本有效。不在元素名称上,不在属性名称或值上。在XSLT1.0时代(大约20年前!),这可能是一种设计选择,但它是有意义的,否则它又是一种创建无效XML的邀请

有什么想法吗?我真的很感激你能提供的任何帮助

对。如果可能的话(我不知道你的情况有多严重,有时历史表明我们不得不接受过去的设计选择),不要将XML或HTML作为文本(你称之为
CDATA
)存储在标记中,更不用说在属性中了

如果您对此无能为力,那么在转换时,将属性转换为元素内部的文本,您的
禁用输出转义将再次工作。但不管怎样,解决方案充其量都是丑陋的


顺便说一句:如果您使用服务器端处理,并且遇到这样存储XML的系统,那么您可能可以切换到XSLT 3.0,它有一个函数
parse-XML()
,作为XPath 3.0的一部分,XPath 3.0可以接受类似于您所使用的字符串的字符串,并将其解释为XML。通过这种方式,您可以验证它并以某种方式进行处理


然而,即使XSLT 3.0也不允许您在属性值中写入标记。

您能展示一个简单的测试用例吗?测试用例是一个示例输入文档和预期的输出文档。另外,XSLT的版本是什么?1.0?, 2? 或者3?正如肖恩所说,但如果你在设置上有困难,请查看SO。
<title><![CDATA[<b>Title</b>]]></title>
&lt;b&gt;Text&lt;/b&gt;