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