-1

我有这个基本的 SOAP 响应:

<?xml version="1.0" encoding="WINDOWS-1252" standalone="yes"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body xmlns="http://www.xxx.com/dotnet/types/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <a>
            <b>
                   <c>
                    c-value
                   </c>
                       b-value
            </b>
                a-value
        </a>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我只想输出 c 节点的值:c-value。

我不明白为什么这个 xsl 不起作用:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
>
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
 <xsl:value-of select="//c"/>
</xsl:template>
</xsl:stylesheet>

似乎问题出在名称空间中,<SOAP-ENV:Body xmlns="http://www.xxx.com/dotnet/types/" 如果我删除它,它就可以工作。

我想我应该更改 xpathselect="//c"或在 xls 中的某个位置添加所需的命名空间,但我做错了!

4

1 回答 1

1

好的,这个链接很有帮助:How to 'select' from XML with namespaces?

我添加了这样的命名空间:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xxx="http://www.xxx.com/dotnet/types/"
>
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
 <xsl:value-of select="//xxx:c"/>
</xsl:template>
</xsl:stylesheet>

首先将 xmlns:xxx 添加到 xlst,然后 XPath 变为 //xxx:c。

用SO写问题,解决问题......

于 2013-04-06T15:03:16.443 回答