解析SOAP消息
问题描述:
我最近开始使用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">
任何帮助将不胜感激。
答
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;
试试这个,这可能对你有帮助。
它编辑后我工作: 'XmlNodeList nodes = xDoc.SelectNodes(“// item [@xsi:type ='ns2:Map']”,nsmgr);' 'Console.WriteLine(nodes。计数); //打印2' – misty
还有一个问题:如何从每个项目中提取**键**和**值**字段? – misty