2017-06-21 156 views
0

我最近開始使用SOAP。
現在我正試圖解析C#中的SOAP消息。是
消息,因爲它遵循:解析SOAP消息

<SOAP-ENV:Body xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <ns1:getBuildingsResponse xmlns:ns1="http://someserver.net/~username/lab/servis?ws=1"> 
    <return SOAP-ENC:arrayType="ns2:Map[2]" xsi:type="SOAP-ENC:Array" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> 
    <item xsi:type="ns2:Map"> 
    <item> 
     <key xsi:type="xsd:string">id</key> 
     <value xsi:type="xsd:string">1</value> 
    </item> 
    <item> 
     <key xsi:type="xsd:string">code</key> 
     <value xsi:type="xsd:string">345-GESG</value> 
    </item> 
    <item> 
     <key xsi:type="xsd:string">name</key> 
     <value xsi:type="xsd:string">Building 1</value> 
    </item> 
    </item> 
    <item xsi:type="ns2:Map"> 
    <item> 
     <key xsi:type="xsd:string">id</key> 
     <value xsi:type="xsd:string">7590913</value> 
    </item> 
    <item> 
     <key xsi:type="xsd:string">code</key> 
     <value xsi:type="xsd:string">353-gr</value> 
    </item> 
    <item> 
     <key xsi:type="xsd:string">name</key> 
     <value xsi:type="xsd:string">Building 2</value> 
    </item> 
    </item> 
</return> 

我想提取密鑰ID 代碼名稱的值。
我試圖做這樣的事情:

XmlDocument xdoc = new XmlDocument(); 
xdoc.LoadXml(client.Invoke("getBuildings").ToString()); 
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable); 
nsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
nsmgr.AddNamespace("i", "item"); 
XmlNodeList xNodelst = xdoc.DocumentElement.SelectNodes("item", nsmgr); 
Console.WriteLine(xNodelst.Count); 
foreach (XmlNode xn in xNodelst) 
{ 
    Console.WriteLine(xn.Value); 
} 

的問題是,我不知道怎麼跟沒有命名空間... 這行代碼標籤行爲:

Console.WriteLine(xNodelst.Count); 

總是打印0,但我想打印2,因爲我在數組中有2個元素(ns2:Map [2])。
含義,我想遍歷所有這些元素:

<item xsi:type="ns2:Map"> 

任何幫助將不勝感激。

回答

1
XmlDocument xdoc = new XmlDocument(); 
    xdoc.LoadXml(client.Invoke("getBuildings").ToString());  
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);  
    XmlNodeList nodes = xDoc.SelectNodes("//item[@xsi:type='ns2:Map']",nsmgr); 
    var nodeCount=nodes.Count; 

試試這個,這可能對你有幫助。

+0

它編輯後我工作: 'XmlNodeList nodes = xDoc.SelectNodes(「// item [@xsi:type ='ns2:Map']」,nsmgr);' 'Console.WriteLine(nodes。計數); //打印2' – misty

+0

還有一個問題:如何從每個項目中提取**鍵**和**值**字段? – misty