无法通过使用XSL解析SOAP响应

时间:2016-04-16 10:00:23

标签: xml xslt soap transformation

我是XSLT的新手,我想从soap响应中生成一个xml,我无法解析soap响应并因命名空间问题而从标记中获取数据。

我的意见:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ProcessResponse xmlns="KeyIntgration">
        <ProcessResult xmlns="">
            <AccessId xmlns="KeyIntgration">paul</AccessId>
            <TransactionId xmlns="KeyIntgration">abcd</TransactionId>
            <Payload xmlns="KeyIntgration">
                <DeclaredValue>8.00</DeclaredValue>
            </Payload>
        </ProcessResult>
    </ProcessResponse>
</s:Body>
</s:Envelope>

这是我的XSL文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:k="KeyIntgration/"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   exclude-result-prefixes="s xsd xsi k">
<xsl:template match="/">
    <rate>
        <xsl:value-of
            select="s:Envelope/s:Body/k:ProcessResponse/k:ProcessResult/k:Payload/k:DeclaredValue/text()" />
    </rate>
</xsl:template>
</xsl:stylesheet>

我的输出来了:

<?xml version="1.0" encoding="UTF-8"?>
  <rate/>

我的预期输出是:

<?xml version="1.0" encoding="UTF-8"?>
  <rate>8.00</rate>

先谢谢

1 个答案:

答案 0 :(得分:1)

  1. 修复xmlns:k="KeyIntgration"的命名空间(最后没有/)。
  2. ProcessResult没有命名空间(因为空xmlns - <ProcessResult xmlns="">
  3. 在Payload和DeclaredValue之间还有一些元素。使用//(或明确添加所有元素)。
  4. 尝试:

      <xsl:value-of
         select="s:Envelope/s:Body/k:ProcessResponse/ProcessResult/k:Payload//k:DeclaredValue/text()" />