2012-03-03 27 views
1

对于下面的XML,XSLT有条件地更改文本字体

  <question>  
      <bp>Suppose a file a.xml has content:</bp> 
      <bp><![CDATA[<a> 1 <b> 2 <b> 3 <a> 4 </a> </b> </b> </a>]]></bp> 
      <bp>What is the value of the following XPath expression:</bp> 
      <bp>for $x in doc("a.xml")//a/b return $x/b/a/text()</bp> 
     </question> 

在XSLT文件,我要改变文本的字体,如果XML标签之间的文本包含

<![CDATA[ ]]> 

我尝试使用以下代码,

 <xsl:for-each select="mcq:bp"> 
      <xsl:if test="contains(. , '<![CDATA[ ]]>')"> 
       <xsl:attribute name='font-family'>courier</xsl:attribute> 
       <xsl:value-of select="."/> 
      </xsl:if> 
      <xsl:value-of select="."/> 
      <br/>        
      </xsl:for-each> 

但是,xslt在浏览器中不显示任何内容。

+2

CDATA部分中没有XML标签。 CDATA的目的是说“这里的东西可能看起来像XML标签,但它们不是。”如果您希望将它们解析为XML,请不要将它们包装在CDATA中。 – 2012-03-04 10:28:47

回答

1

这不能用XSLT完成。

当XSLT传递经过解析的XML文档时,没有任何关于文本节点是否包含CDATA节的信息 - 这个词法细节由于解析XML而被剥离(丢失)文件。

CDATA不是一个字符串,它不是文本节点的一部分。因此,尝试使用函数来检测CDATA节是错误的。

+0

@迈克尔凯 感谢您的答复。 我想知道如果我修改了XML如下。 在XSLT我如何能在formt CDATA文本改变其字体以“快递” – shw 2012-03-05 21:29:03