0

この SOAP 応答がありますが、コードが GetLatestReadingByMeterNoResult の子を読み取っていません。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
  <soapenv:Body>
    <GetLatestReadingByMeterNoResponse xmlns="http://www.multispeak.org/Version_3.0">
     <GetLatestReadingByMeterNoResult objectID="112199498" utility="xxxxx">
      <meterNo>112199498</meterNo> 
      <deviceID>112199498</deviceID> 
      <readingDate>2013-02-27T17:00:00.000Z</readingDate> 
      <posKWh>8406</posKWh> 
      <kW>15.508</kW> 
      <kWDateTime>2013-02-27T17:00:00.000Z</kWDateTime> 
      </GetLatestReadingByMeterNoResult>
     </GetLatestReadingByMeterNoResponse>
  </soapenv:Body>
</soapenv:Envelope>

コード:

XmlDocument resultXml = new XmlDocument();
XmlNamespaceManager mgr = new XmlNamespaceManager(resultXml.NameTable);
mgr.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
mgr.AddNamespace("", "http://www.multispeak.org/Version_3.0");
resultXml.LoadXml(soapResult);
XmlNodeList nodeList = resultXml.SelectNodes("//GetLatestReadingByMeterNoResult", mgr);

nodeList はノードを返しません

4

1 に答える 1

5

これを試して:

mgr.AddNamespace("multi", "http://www.multispeak.org/Version_3.0");
resultXml.LoadXml(soapResult);
XmlNodeList nodeList = resultXml.SelectNodes("//multi:GetLatestReadingByMeterNoResult", mgr);

デフォルトの名前空間を扱う場合でも、コードで XPATH を使用する場合はプレフィックスを使用する必要があります。

于 2013-02-27T19:53:14.353 に答える