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

时间:2015-09-03 13:35:36

标签: html xml xslt cdata

我现有的功能转换,将数据XML文件转换为漂亮而有光泽的HTML文档。

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

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

<xsl:value-of select="$title" disable-output-escaping="yes"/>

我认为问题在于数据。虽然标签中的文字可以用CDATA ...

表示
<title><![CDATA[<b>Title</b>]]></title>

......并且工作,属性中的数据更难以处理。首先,CDATA无法在属性中工作。所以我尝试了HTML encoing。

&lt;b&gt;Text&lt;/b&gt;

但这不会解释,它显示HTML标签witzh或没有disable-output-escaping =&#34; yes&#34;在转型中。我认为标签的解码是迟到的解释。

有什么想法吗?我非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

  

我认为问题在于数据。虽然标签中的文字可以用CDATA ...

表示
<title><![CDATA[<b>Title</b>]]></title>

也许问题在于你试图将XML表示为已经是XML的文本,为什么不简单<title><b>title</b></title>?您将免费获得XML格式良好的检查,如果您想 使用<title>内的元素,您可以使用XSLT(目前看到它)来处理它们作为文本,所以你可以用它做什么非常有限。)

  

..并且工作,属性中的数据更难以处理。首先,CDATA无法在属性中工作。所以我尝试了HTML encoing。

&lt;b&gt;Text&lt;/b&gt;

哎呀,你是说你把XML作为文本放在属性中?如果你可以防止这种情况......你将为自己节省大量的麻烦。 XML中的属性包含平面值,而不是结构化内容。

  

但这不会解释,它显示HTML标签witzh或没有disable-output-escaping =&#34; yes&#34;在转型中。我认为标签的解码是迟到的解释。

我不认为你的意思&#34;它表明......在转型中#34;因为转型没有显示任何东西。你的意思是它在浏览器中以HTML格式打开时的显示方式吗?

不,解码也不算太晚。 disable-output-escaping仅对元素内的文本有影响。不是元素名称,不是属性名称或值。这可能是XSLT 1.0(差不多20年前!)时代的设计选择,但它是有道理的,否则它是另一个创建无效XML的邀请。

  

有什么想法吗?我非常感谢您提供的任何帮助。

是。如果可能的话(我不知道您的情况的扩展,有时历史表明我们必须接受过去的设计选择),不要将XML或HTML存储为文本(您称之为CDATA内部标签,更不用说内部属性了。

如果你无法帮助,那么在转换后,将属性转换为元素内的文本,disable-output-escaping将再次起作用。但不管怎样,解决方案充其量都是丑陋的。

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

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