C# 解析带多个命名空间的xml文件

摘要:
C#中用SelectSingleNode方法解析带有多个命名空间的XML文件XML文件如下:˂?现在要得到的是Name为Text_10的TextBox结点的Value属性值:abc。关于SelectSingleNode方法大家可以参考:http://msdn.microsoft.com/en-us/library/h0hw012b.aspx这个方法有两个参数,第一个是stringxpath,这个是必须的,第二个是XmlNamespaceManagernsmgr,这个可选。重要的一点就是xpath的写法,主要就是命名空间:节点/命名空间:节点/...,官方给的示例中只有一个命名空间,xml结构相对比较简单。从上面的XML文件中很容易看出ViewControl的命名空间是Enginuity,但ViewBox的命名空间是什么呢?
C#中用SelectSingleNode方法解析带有多个命名空间的XML文件
XML文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<Enginuity:ViewControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Enginuity="clr-namespace:Enginuity.Core;assembly=Enginuity.Core">
<Viewbox Stretch="Fill">
<TextBox Name="Text_10" Value="abc"/>
<TextBox Name="Text_11" Value="bcd"/>
</Viewbox>
</Enginuity:ViewControl>

这里小小提示一下,Enginuity:ViewControl 这种写法表示ViewControl的命名空间为Enginuity。

现在要得到的是Name为Text_10的TextBox结点的Value属性值:abc。

关于SelectSingleNode方法大家可以参考:http://msdn.microsoft.com/en-us/library/h0hw012b.aspx

这个方法有两个参数,第一个是string xpath,这个是必须的,第二个是XmlNamespaceManager nsmgr,这个可选。重要的一点就是xpath的写法,主要就是命名空间:节点/命名空间:节点/...,官方给的示例中只有一个命名空间,xml结构相对比较简单。

从上面的XML文件中很容易看出ViewControl的命名空间是Enginuity,但ViewBox的命名空间是什么呢?查找了XML文件命名空间的定义后,发现有这么一句”如果Xml文档里没有明确指出当前节点的命名空间,那么当前节点的命名空间继承其父节点的命名空间“,ViewBox的父节点是ViewControl,ViewControl的命名空间是Enginuity,同时注意到Enginuity还不是最终的命名空间,Enginuity的命名空间是xmlns,那么是哪一个呢?

动手试呗,于是写出下面的程序:

            XmlDocument dom = new XmlDocument();
dom.Load(@"E:NET est.xml");
XmlNamespaceManager xnm=new XmlNamespaceManager(dom.NameTable);
xnm.AddNamespace("e", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
xnm.AddNamespace("x", "http://schemas.microsoft.com/winfx/2006/xaml");
xnm.AddNamespace("d", "http://schemas.microsoft.com/expression/blend/2008");
xnm.AddNamespace("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");
xnm.AddNamespace("Enginuity", "clr-namespace:Enginuity.Core;assembly=Enginuity.Core");
XmlNodeList xNodes = dom.SelectSingleNode("Enginuity:ViewControl", xnm).ChildNodes;
Console.WriteLine(xNodes[0].NamespaceURI);

结果如下:

C# 解析带多个命名空间的xml文件第1张

可以看到,ViewControl的命名空间为最顶及的xmlns,于是写出下面的程序:

            XmlDocument dom = new XmlDocument();
dom.Load(@"E:NET est.xml");
XmlNamespaceManager xnm=new XmlNamespaceManager(dom.NameTable);
xnm.AddNamespace("e", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
xnm.AddNamespace("x", "http://schemas.microsoft.com/winfx/2006/xaml");
xnm.AddNamespace("d", "http://schemas.microsoft.com/expression/blend/2008");
xnm.AddNamespace("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");
xnm.AddNamespace("Enginuity", "clr-namespace:Enginuity.Core;assembly=Enginuity.Core");
XmlNode xNode = dom.SelectSingleNode("Enginuity:ViewControl/e:Viewbox/e:TextBox[@Name='Text_10']", xnm);
Console.WriteLine(xNode.Attributes["Value"].Value);

运行后效果如下:

C# 解析带多个命名空间的xml文件第2张

期待中的”abc“终于出现了。

因此,得出一个结论,在用SelectSingleNode方法解析含有多个命名空间的XML文件时,没有明确标出命名空间的节点,其命名空间为根节点的命名空间。如果还不确定可以从根节点开始,逐层输出该级节点的命名空间。

keyword:SelectSingleNode,C#解析XML文件,SelectSingleNode多命名空间,

免责声明:文章转载自《C# 解析带多个命名空间的xml文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇QDialog之屏蔽Esc键(简单深刻,要么重写keyPressEvent然后break忽略此事件,要么重写eventFilter然后return,都是为了忽略此事件)OpenLDAP 安装及配置 笔记下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

解决WAS更新web.xml文件不生效的问题(web_merged.xml是罪魁祸首)

问题原因分析 近日碰到更新web.xml文件到WAS服务器(WebSphere Application Server 8.5.5.3)后,不生效的问题。 网上找了一圈,基本都是说WAS缓存引起的。 手动更新了缓存目录下(configcells<cell_name>applications<ear_name>deployments&l...

位置动画Android的Activity屏幕切换动画(一)左右滑动切换

查了好多资料,发现还是不全,干脆自己理整吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!     在Android发开中程过,经常会到碰Activity之间的换切效果的题问,上面绍介一下如何实现阁下滑动的换切效果,首先懂得一下Activity换切的实现,从Android2.0开始在Activity增加了一个方法:     public v...

intelij IDEA设置goole code style风格

1.安装google-java-format 插件      file ->Setings... ->pligins     输入上诉插件安装 2.下载IntelliJ Java Google Style file文件     文件已经挂在本人博客,https://download.csdn.net/download/banana100603...

DOM、JDOM、DOM4J的区别

dom是解析xml的底层接口之一(另一种是sax)   而jdom和dom4j则是基于底层api的更高级封装    dom是通用的,而jdom和dom4j则是面向Java语言的       DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分...

JSON的数据格式

1. 什么是 JSON       JSON概念很简单,JSON 是一种轻量级的数据格式,他基于 javascript 语法的子集,即数组和对象表示。由于使用的是 javascript 语法,因此JSON 定义可以包含在javascript 文件中,对其的访问无需通过基于 XML 的语言来额外解析。不过在使用 JSON 之前,很重要的一点是理解 javas...

Android学习笔记六:六大布局

六大界面布局方式包括:线性布局(LinearLayout)、帧布局(FrameLayout)、表格布局(TableLayout)、相对布局(RelativeLayout)、绝对布局(AbsoluteLayout)和网格布局(GridLayout)。 1. LinearLayout线性布局 LinearLayout容器中的组件一个挨一个排列,通过控制and...