2

申し訳ありませんが、私は SOAP と C# を初めて使用します。SOAP応答でノードを見つけるために名前空間をどのように正しく設定するかがわかりません。

Web サービス クエリが空を返した場合の応答は次のとおりです。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <ns:VXWSResponse xmlns:ns="vx.sx">
            <ns:List ns:id="result" />
        </ns:VXWSResponse>
    </soapenv:Body>
</soapenv:Envelope>

データが返された場合の応答は次のとおりです。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <ns:VXWSResponse xmlns:ns="vx.sx">
            <ns:List ns:id="result">
                <ns:Badge>USER DATA</ns:Badge>
            </ns:List>
        </ns:VXWSResponse>
    </soapenv:Body>
</soapenv:Envelope>

タグが存在するかどうかを知る必要があるだけです。

これが私がこれまでに持っているものです。

XmlNamespaceManager manager = new XmlNamespaceManager(xml.NameTable);
manager.AddNamespace("ns", "vx.sx");
manager.AddNamespace("id", "result");
xmlNode badge = xml.SelectSingleNode("//id:Badge", manager);
XmlNode result = xml.SelectSingleNode("//ns:result", manager);

両方のノードが null を返します。このサイトの他の多くの記事を見てきましたが、応答 XML で名前空間を正しくアドレス指定する方法がわかりません。

どんな助けでも大歓迎です!

4

1 に答える 1

2

ID は名前空間ではなく、リスト ノードの属性です。

あなたが探したいと思うのはそれだけなので、バッジ要素を確認するためにこれを編集しました。

        XmlNamespaceManager manager = new XmlNamespaceManager(xmlDoc.NameTable);
        manager.AddNamespace("ns", "vx.sx");

        XmlNode badge = xmlDoc.SelectSingleNode("//ns:Badge", manager);

        if (badge == null)
        {
          // no badge element
        }
        else
        {
            // badge element present
        }
于 2013-05-02T21:00:24.180 に答える