使用xsl从元素中提取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&o/p是用varibales写的。

我试过了,

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

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

最终找到了答案,来自Borodin(下图(的原始答案也起作用。我必须解析I/p,以便我的处理器识别。

(我使用的是dpxsl处理器,所以名称空间是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。

谢谢大家。

您的源XML格式不正确,因为在根元素的打开标记之后不能有XML声明。

假设这个声明应该移到文件的顶部,那么您可以编写一个XSLT转换,使用text输出方法来生成您想要的内容。

<?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, '?>')"/>

最新更新