0

输入:(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 写入/写入变量。

我试过这个,

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

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

4

2 回答 2

1

终于想通了,Borodin(下)的原始答案也有效。我必须解析 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。

谢谢大家。

于 2013-05-21T19:04:37.813 回答
0

您的源 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, '?>')"/>
于 2013-05-17T21:08:56.927 回答