一般的xml文件相信大家都會解析了,但是遇到有命名空間的帶前綴的xml,對於新手可能會有點問題。我這裡在論壇解答的時候就遇到過一題,見怎麼獲取XML節點裡面的內容,在線求教。這裡給大家演示一下。
他的結構是這樣子的:
[plain]
<?xml version="1.0" encoding="utf-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.jiangsuedu.net/justone/">
<SOAP-ENV:Header>
<TransactionID>110000000001</TransactionID>
<ServiceType>/sms/mt</ServiceType>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<GateWayID>YNMC</GateWayID>
<DstID>15125664368</DstID>
<SrcID>099879</SrcID>
<FeeID>15125664368</FeeID>
<LinkID/>
<MsgContent>哈哈</MsgContent>
<ServiceID>AYN3913101</ServiceID>
<MsgID>1234</MsgID>
<CommitTime>201311130101022</CommitTime>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
比如我們要取MsgContent節點下的內容,我們直接去取是會報錯的。比如:
[csharp]
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
string value = doc.SelectSingleNode("/SOAP-ENV:Envelope/SOAP-ENV:Body/MsgContent").InnerText;
這裡value會發生異常,如圖:
根據錯誤提示,已經提醒我們需要命名空間管理器。
[csharp]
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
XmlElement root = doc.DocumentElement;
string nameSpace = root.NamespaceURI;
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); ;
nsmgr.AddNamespace("SOAP-ENV", nameSpace);
string value = doc.SelectSingleNode("/SOAP-ENV:Envelope/SOAP-ENV:Body/MsgContent", nsmgr).InnerText;
Console.WriteLine(value);//輸出:哈哈
這時我們加上了XmlNamespaceManage進行處理,成功的獲取到了我們想要的內容。