0

输入 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>
4

1 回答 1

3

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

于 2013-06-30T17:20:31.973 回答