我现有的功能转换,将数据XML文件转换为漂亮而有光泽的HTML文档。
现在我想强调特殊条件下的一些数据。我的第一个想法是使用一些HTML标签。 它在一定程度上起作用。
第一个重要步骤是在XSLT文件中进行转换后启用HTML解释。
<xsl:value-of select="$title" disable-output-escaping="yes"/>
我认为问题在于数据。虽然标签中的文字可以用CDATA ...
表示<title><![CDATA[<b>Title</b>]]></title>
......并且工作,属性中的数据更难以处理。首先,CDATA无法在属性中工作。所以我尝试了HTML encoing。
<b>Text</b>
但这不会解释,它显示HTML标签witzh或没有disable-output-escaping =&#34; yes&#34;在转型中。我认为标签的解码是迟到的解释。
有什么想法吗?我非常感谢您提供的任何帮助。
答案 0 :(得分:1)
我认为问题在于数据。虽然标签中的文字可以用CDATA ...
表示<title><![CDATA[<b>Title</b>]]></title>
也许问题在于你试图将XML表示为已经是XML的文本,为什么不简单<title><b>title</b></title>
?您将免费获得XML格式良好的检查,如果您想 使用<title>
内的元素,您可以使用XSLT(目前看到它)来处理它们作为文本,所以你可以用它做什么非常有限。)
..并且工作,属性中的数据更难以处理。首先,CDATA无法在属性中工作。所以我尝试了HTML encoing。
<b>Text</b>
哎呀,你是说你把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也不允许您在属性值中写入标记。