读取XML文件节点带有冒号
上一篇 /
下一篇 2018-01-31 10:52:34
/ 个人分类:总结
昨天在写一个
测试用例脚本,读取XML文件中节点的属性值,遇到一个问题,XML根节点下的子节点有冒号如下,开始读的时候按照平常的读取的逻辑,结果怎么也读取不到,不加冒号读取不到,加冒号后报错。
<AppendApp Name="L">
<start:Tile UserID="***">
<start:Tile UserID="!!!">
<start:Tile UserID="&&&">
</AppendApp>
查了下资料,原来带冒号的节点,冒号前的start代表的是命名空间,冒号后的才是根节点名称。
了解了具体情况后,再来看看读取情况:
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("layout.xml");
XmlNodeList start=xmlDoc.GetElementsByTagName("start:Tile");
foreach(XmlNode xn in start)
{
XmlElement xe=(XmlElement)xn;
string proper=xe.GetAttribute("UserID");
if(proper.equals("!!!"))
{
Console.WriteLine("find the node");
}
else
Console.WriteLine("find failed");
}
执行结果:
find failed
find the node
find failed
可以用XNamespace先获取命名空间
XNamespace xns="start" ;
XmlNodeList start=xmlDoc.GetElementsByTagName(xns+"Tile");
如果用Descendants方法来获取带有命名空间的节点,必须包含命名空间。如下:
<a:root xmlns:a="http://ww.abc.com/">
<a:book>aaaa</a:book>
</a:root>
直接用 var ele=from item in xDoc.Descendants("a:book") select item;直接这样用是会报错,需要改为如下:
XDocument xDoc =XDocument.Load("a.xml");
XNamespace n=@"http://www.abc.com";varele =fromiteminxDoc.Descendants(n +"book")selectitem.Value;
先声明一个XNamespace类变量,把XML文件中出现的命名空间 http://ww.abc.com/ 赋值给它,然后再读取节点的时候,与真正的节点名称book进行拼接就可以了!
XML中出现命名空间的原因是,当你需要使用多个XML一起工作时,由于两个文档都包含带有不同内容和定义的节点元素,就会发生命名冲突,加上命名空间使用可以避免发生冲突,这与C#编程中类的命名空间的用处差不多。
收藏
举报
TAG: