1

http://www.w3schools.com/xpath/xpath_examples.aspで定義されている XPath アプローチを使用する と、XML 文字列内の要素に簡単にアクセスできます。しかし、これは以下のような SOAP パケットでは機能しません。「SOAP-ENV が宣言されていません」というエラーが表示されます。

私のXPath文字列

/SOAP-ENV:Envelope/SOAP-ENV:Body/SpRc:ScanPortsResponse/SpRc:PortDescs[1]

XML/SOAP メッセージ

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SpRc="urn:SpRc">
    <SOAP-ENV:Body>
        <SpRc:ScanPortsResponse>
            <SpRc:PortDescs>
                <SpRc:item>
                    <SpRc:Serial>4215002032</SpRc:Serial>
                    <SpRc:TypeNumber>215</SpRc:TypeNumber>
                    <SpRc:Ip>4M5rAQ==</SpRc:Ip>
                    <SpRc:Mac>GDAAURgk</SpRc:Mac>
                    <SpRc:FirmwareVersion>1</SpRc:FirmwareVersion>
                    <SpRc:FirmwareVariant>0</SpRc:FirmwareVariant>
                    <SpRc:Port>1</SpRc:Port>
                    <SpRc:OutputType>28738</SpRc:OutputType>
                    <SpRc:Capabilities>97</SpRc:Capabilities>
                    <SpRc:InUse>1</SpRc:InUse>
                </SpRc:item>
            </SpRc:PortDescs>
            <SpRc:SpRcResult>0</SpRc:SpRcResult>
        </SpRc:ScanPortsResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
4

2 に答える 2

2

これは、XML 名前空間に問題があるようです。XPath パーサーは名前空間を認識しているようです。XML を解析する前に、パーサーで SOAP 名前空間を設定してみてください。

于 2012-08-22T03:33:12.137 に答える
1

上記の Abhinav Sarkar による回答は正しいですが、詳しく説明したいと思います。使用する必要があります

/SOAP-ENV:Body/SpRc:ScanPortsResponse/SpRc:PortDescs[1]

それ以外の

/SOAP-ENV:Envelope/SOAP-ENV:Body/SpRc:ScanPortsResponse/SpRc:PortDescs[1]

XPATH は名前空間を後方に検索し、親タグが名前空間が定義されている場所にある場合は機能しないためです。

于 2012-08-25T02:29:22.233 に答える