使用xsl从元素中提取CDATA

时间:2013-05-17 20:43:51

标签: xml xslt cdata

输入:(XML)

<A1Result xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <![CDATA[
    <?xml version="1.0" encoding="UTF-8" ?>
    <ABCD_XML_DATA>
        <Header>
            <MessageId>AGDMY1323292534488</MessageId>
        </Header>
    </ABCD_XML_DATA>
    ]]>
</A1Result>

我需要使用xsl:

输出
<ABCD_XML_DATA>
    <Header>
        <MessageId>AGDMY1323292534488</MessageId>
    </Header>
</ABCD_XML_DATA>

其他信息,我的i / p&amp; o / p写入varibales。

我试过这个,

<xsl:variable name="Data"> 
    <xsl:value-of select="$A1Result" disable-output-escaping="yes"/> 
</xsl:variable>

请建议如何实现这一点,谢谢。

2 个答案:

答案 0 :(得分:1)

终于想通了,鲍罗丁(下图)的原始答案也有效。我不得不解析i / p,让我的处理器识别出来。

(我使用的是dp xsl处理器,所以名称空间为dp);我昨天也在尝试同样的事情而没有运气;我不得不解析它工作。

<xsl:copy-of select="dp:parse(dp:variable('var://context/saved/MyRes')//*[local-name()='A1Result'])" disable-output-escaping="yes"/> 

其中,'var:// context / saved / MyRes',来自问题的输入xml。

全部谢谢。

答案 1 :(得分:0)

您的源XML格式不正确,因为您无法在根元素的开始标记之后获得XML声明。

假设应该将此声明移动到文件的顶部,您可以编写一个使用text输出方法生成所需内容的XSLT转换。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:output method="text"/>

  <xsl:template match="/">
  <xsl:value-of select="A1Result"/>
  </xsl:template>

</xsl:stylesheet>

<强>输出

<ABCD_XML_DATA>
    <Header>
        <MessageId>AGDMY1323292534488</MessageId>
    </Header>
</ABCD_XML_DATA>

<强>更新

如果要从CDATA中删除XML声明,那么您可以使用

<xsl:value-of select="substring-after(A1Result, '?>')"/>