天天看点

C# 解析带前缀的Xml节点内容

他的结构是这样子的:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<code>&lt;?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"utf-8"</code> <code>?&gt;</code>

<code>&lt;</code><code>SOAP-ENV:Envelope</code> <code>xmlns:SOAP-ENV</code><code>=</code><code>"http://www.jiangsuedu.net/justone/"</code><code>&gt;</code>

<code>  </code><code>&lt;</code><code>SOAP-ENV:Header</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>TransactionID</code><code>&gt;110000000001&lt;/</code><code>TransactionID</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>ServiceType</code><code>&gt;/sms/mt&lt;/</code><code>ServiceType</code><code>&gt;</code>

<code>  </code><code>&lt;/</code><code>SOAP-ENV:Header</code><code>&gt;</code>

<code>  </code><code>&lt;</code><code>SOAP-ENV:Body</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>GateWayID</code><code>&gt;YNMC&lt;/</code><code>GateWayID</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>DstID</code><code>&gt;15125664368&lt;/</code><code>DstID</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>SrcID</code><code>&gt;099879&lt;/</code><code>SrcID</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>FeeID</code><code>&gt;15125664368&lt;/</code><code>FeeID</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>LinkID</code><code>/&gt;</code>

<code>    </code><code>&lt;</code><code>MsgContent</code><code>&gt;哈哈&lt;/</code><code>MsgContent</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>ServiceID</code><code>&gt;AYN3913101&lt;/</code><code>ServiceID</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>MsgID</code><code>&gt;1234&lt;/</code><code>MsgID</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>CommitTime</code><code>&gt;201311130101022&lt;/</code><code>CommitTime</code><code>&gt;</code>

<code>  </code><code>&lt;/</code><code>SOAP-ENV:Body</code><code>&gt;</code>

<code>&lt;/</code><code>SOAP-ENV:Envelope</code><code>&gt;</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会发生异常,如图:

C# 解析带前缀的Xml节点内容

根据错误提示,已经提醒我们需要命名空间管理器。

<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