2011-05-09 44 views
1

我想:的xsl:使用CDATA段元素的輸出,不封裝針對性的CDATA標記CDATA段元素

  <!-- Arrive at the target XQuery --> 
    <p:processor name="oxf:xslt"> 
     <p:input name="config"> 
      <xsl:stylesheet version="2.0"> 
       <xsl:output method="xml" version="1.0" 
encoding="iso-8859-1" indent="yes" cdata-section-elements="text"/> 
       <xsl:template match="/"> 
        <xsl:variable name="apps" select="doc('input:instance')//APPLICATION"/>       
        <jaxrx:query> 
         <text> 
xquery version "1.0"; 

declare namespace fn="http://www.w3.org/2005/xpath-functions"; 

let $dataSet := <xsl:value-of select="doc('input:request')/request/parameters/parameter[name='dataSet']/value" /> 
let $databaseName := <xsl:value-of select="/Configuration/XMLDB/Name/text()" /> 
let $applicationID := <xsl:value-of select="doc('input:request')/request/parameters/parameter[name='applicationID']/value" /> 

let $finalURL := fn:concat($databaseName, "/",$dataSet) 
let $applicationsModified := '<xsl:copy-of select="$apps"/>' 
          <!-- disable-output-escaping not supported by Orbeon xslt processor 
(: let $applicationsModified := '<xsl:text disable-output-escaping="yes"> 
           <![CDATA[<]]> 
          </xsl:text> 
          <xsl:text disable-output-escaping="yes">![CDATA[</xsl:text> 
          <xsl:copy-of select="$apps"/> 
          <xsl:text>]]</xsl:text> 
          <xsl:text disable-output-escaping="yes"> 
           <![CDATA[>]]></xsl:text>' :) --> 
for $all in fn:collection($finalURL) 
    for $anApp in $all/APPLICATION[APPLICATION_ID=$applicationID] 
return 
(
replace node $anApp with $applicationsModified 
) 
         </text> 
        </jaxrx:query> 
       </xsl:template> 
      </xsl:stylesheet> 
     </p:input> 
     <p:input name="data" href="#configuration"/> 
     <p:input name="request" href="#request"/> 
     <p:input name="instance" href="#instance"/> 
     <p:output name="data" id="TargetXQuery"/> 
    </p:processor> 

隨着生產像

<jaxrx:query><text><![CDATA[text of xquery with embedded xml]]></text></jaxrx:query> 
結果的希望

但是,文本(元素的名稱)元素的文本內容不會封裝在CDATA節中。任何指針爲什麼?

我自己也嘗試設置CDATA段元素=:的「jaxrx文本」,而不是CDATA段元素=「文本」,但我仍然得到

<text>text of xquery with embedded xml</text> 

,在CDATA所以沒有封裝部分...

+0

據我所知,我需要自己輸出CDATA標籤,是否正確?在這種情況下,我無法輸出打開和關閉此CDATA標記的尖括號,而不是格式爲< >格式(在我用另一種方法指出的情況下,disable-output-escaping =「yes」不會產生Orbeon中的所需結果題) – user557060 2011-05-09 12:54:44

回答

2

CDATA部分不會原樣保存在管道中。但是,保留了等效的XML InfoSet。因此,舉例來說,如果你逃跑用CDATA節&字符:

<![CDATA[&]]> 

當這種經過一個管道,你可能最終與符號逃脫不同,如:

&amp; 

如果你需要嵌入XQuery作爲文本的XML元素,隨意寫的東西就像在你的管道下面:

<jaxrx:query><text><![CDATA[text of xquery with embedded xml]]></text></jaxrx:query> 

如果輸出這個與「調試」屬性,你不會看到CDATA,但是你的XQuery將被正確地轉義。