C#中解析带有多个命名空间的XML文件
在从事某项目开发过程中,需要使用XML传输数据,但是此次XML获取内容按照常规办法行不通,后面发现是XML文件中含有名称空间,XML文件示例如下:
<?xml version="1.0" encoding="utf-8"?> <abc:TestXml xmlns:abc="http://www.xxx.com" xmlns:xsi="http://www.w3.org"> <MessageType>test</MessageType> <PrimaryAcctNum>dddddddddddddddddd</PrimaryAcctNum> <IDCardNum>66666666666666666</IDCardNum> <Mobile>13888888888</Mobile> </abc:TestXml>
通过查找资料发现,abc:TestXml 这种写法表示TestXml的命名空间为abc。
我们现在所要做的是获取abc:TestXml下子节点的内容,按照常规方法循环读取XML会报错误,需要使用XmlNamespaceManager,代码如下:
XmlDocument myDoc = new XmlDocument();
myDoc.Load(@"E:\NET\test.xml"); //加载XML文件
XmlNamespaceManager xnm = new XmlNamespaceManager(myDoc.NameTable);
xnm.AddNamespace("abc", "http://www.xxx.com");
xnm.AddNamespace("xsi", "http://www.w3.org");
XmlNodeList xNodes = myDoc.SelectSingleNode("abc:TestXml", xnm).ChildNodes;//获取节点的所有子节点
string messageType="";
foreach (XmlNode xn in xNodes)//遍历所有子节点
{
XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
if(xe.Name == "MessageType")
{
messageType=xe.InnerText;//获取子节点中数据
}
}
至此,我们已经能获取到XML文件中数据。
浙公网安备 33010602011771号