2012-03-03 48 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