2013-06-30 91 views
0

輸入XML的XML內容:XSLT:如何提取XSLT變量

<Resp> 
     <Data><![CDATA[QREMLGBU <?xml version="1.0" encoding="UTF-8" ?><Envelope><Headers><Headers><Body><Response> 
; 
;; 
;;; 
</Response></Body></Envelope> 
</Data> 
</Resp> 

我想擺脫元素的XML到一個變量和(使用XPATH)從該變量中提取的元素。 (前49個字符是固定的,其餘可以改變)。

<xsl:template match="/"> 
    <xsl:variable name="abc"> 
     <xsl:value-of select="substring(/Resp/Data,49)"/> 
    </xsl:variable> 
</xsl:template> 

我能夠獲得價值爲變量ABC一樣

<Envelope><Headers><Headers><Body><Response></Response></Body></Envelope> 

,但不能夠進一步使用該變量作爲XML元素。

Example: 
<xsl:copy-of select="$abc/Envelope/Body/Response"/> 

任何人都可以幫助我得到如下輸出。

<Response> 
; 
;; 
;;; 
</Response> 

回答

3

因爲這是嵌套的XML在CDATA節,XML解析器將其視爲一個單一的文本節點(CDATA有效地寫着「忽略任何這裏看起來像標記,把它當作文本」)。因此,您需要將文本解壓縮爲字符串,然後將其傳遞給另一個解析器以將其轉換爲節點樹。在XSLT/XPath 3.0之前沒有標準的方法,但有些處理器有擴展。使用Saxon-PE或更高版本,您可以使用XPath 3.0函數parse-xml()