XSLT:如何从xslt变量中提取xml内容

时间:2013-06-30 15:52:05

标签: xml xslt substring cdata

输入XML:

<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>

1 个答案:

答案 0 :(得分:3)

因为这是CDATA部分中的嵌套XML,所以XML解析器将其视为单个文本节点(CDATA有效地说“忽略这里看起来像标记的任何内容,将其视为文本。”)。因此,您需要将文本提取为字符串,然后将其传递给另一个解析器,以将其转换为节点树。在XSLT / XPath 3.0之前没有标准的方法,但有些处理器有扩展。使用Saxon-PE或更高版本,您可以使用XPath 3.0函数parse-xml()