他的结构是这样子的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<code><?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"utf-8"</code> <code>?></code>
<code><</code><code>SOAP-ENV:Envelope</code> <code>xmlns:SOAP-ENV</code><code>=</code><code>"http://www.jiangsuedu.net/justone/"</code><code>></code>
<code> </code><code><</code><code>SOAP-ENV:Header</code><code>></code>
<code> </code><code><</code><code>TransactionID</code><code>>110000000001</</code><code>TransactionID</code><code>></code>
<code> </code><code><</code><code>ServiceType</code><code>>/sms/mt</</code><code>ServiceType</code><code>></code>
<code> </code><code></</code><code>SOAP-ENV:Header</code><code>></code>
<code> </code><code><</code><code>SOAP-ENV:Body</code><code>></code>
<code> </code><code><</code><code>GateWayID</code><code>>YNMC</</code><code>GateWayID</code><code>></code>
<code> </code><code><</code><code>DstID</code><code>>15125664368</</code><code>DstID</code><code>></code>
<code> </code><code><</code><code>SrcID</code><code>>099879</</code><code>SrcID</code><code>></code>
<code> </code><code><</code><code>FeeID</code><code>>15125664368</</code><code>FeeID</code><code>></code>
<code> </code><code><</code><code>LinkID</code><code>/></code>
<code> </code><code><</code><code>MsgContent</code><code>>哈哈</</code><code>MsgContent</code><code>></code>
<code> </code><code><</code><code>ServiceID</code><code>>AYN3913101</</code><code>ServiceID</code><code>></code>
<code> </code><code><</code><code>MsgID</code><code>>1234</</code><code>MsgID</code><code>></code>
<code> </code><code><</code><code>CommitTime</code><code>>201311130101022</</code><code>CommitTime</code><code>></code>
<code> </code><code></</code><code>SOAP-ENV:Body</code><code>></code>
<code></</code><code>SOAP-ENV:Envelope</code><code>></code>
比如我们要取MsgContent节点下的内容,我们直接去取是会报错的。比如:
<code>XmlDocument doc = </code><code>new</code> <code>XmlDocument();</code>
<code>doc.Load(</code><code>"test.xml"</code><code>);</code>
<code>string</code> <code>value = doc.SelectSingleNode(</code><code>"/SOAP-ENV:Envelope/SOAP-ENV:Body/MsgContent"</code><code>).InnerText;</code>
这里value会发生异常,如图:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiIXZ05WZD9CX5RXa2Fmcn9CXwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVP9c2YsJkbjhGayMmaG1mYwhmMZZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TM4cTOzYTN0ETOxETMzEDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
根据错误提示,已经提醒我们需要命名空间管理器。
<code> </code>
<code>XmlElement root = doc.DocumentElement;</code>
<code>string</code> <code>nameSpace = root.NamespaceURI;</code>
<code>XmlNamespaceManager nsmgr = </code><code>new</code> <code>XmlNamespaceManager(doc.NameTable); ;</code>
<code>nsmgr.AddNamespace(</code><code>"SOAP-ENV"</code><code>, nameSpace);</code>
<code>string</code> <code>value = doc.SelectSingleNode(</code><code>"/SOAP-ENV:Envelope/SOAP-ENV:Body/MsgContent"</code><code>, nsmgr).InnerText;</code>
<code>Console.WriteLine(value);</code><code>//输出:哈哈</code>
这时我们加上了XmlNamespaceManage进行处理,成功的获取到了我们想要的内容。
本文转自 guwei4037 51CTO博客,原文链接:http://blog.51cto.com/csharper/1345985