国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

多命名空間的 Xml 文檔解析

2019-11-17 03:17:45
字體:
來源:轉載
供稿:網友

多命名空間的 xml 文檔解析

原標題:《C#中用SelectSingleNode方法解析帶有多個命名空間的XML文件》

下文是對C#對XML的具體操作

如何完成.Net下XML文檔的讀寫操作

C#操作xml SelectNodes,SelectSingleNode總是返回NULL 與 xPath 介紹

C#中用SelectSingleNode方法解析帶有多個命名空間的XML文件

今晚在博問看到一個問題:查找xml文件中特定屬性值的節點,給它增加一個新屬性,本以為很簡單,隨手寫了一個程序,卻遇到了問題,主要是多個命名空間的原因,查找了一些資料最終解決了,現把解決的辦法分享出來,大家如果有更好的方案歡迎留言討論。

XML文件如下:

 1 <?xml version="1.0" encoding="utf-8" ?> 2 <Enginuity:ViewControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/

這里小小提示一下,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/test.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);

結果如下:

  可以看到,ViewControl的命名空間為最頂及的xmlns,于是寫出下面的程序:

            XmlDocument dom =new XmlDocument();            dom.Load(@"E:/NET/test.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);

運行后效果如下:

  期待中的”abc“終于出現了。

  因此,得出一個結論,在用SelectSingleNode方法解析含有多個命名空間的XML文件時,沒有明確標出命名空間的節點,其命名空間為根節點的命名空間。如果還不確定可以從根節點開始,逐層輸出該級節點的命名空間。

  keyWord:SelectSingleNode,C#解析XML文件,SelectSingleNode多命名空間,

作者:Work Hard Work Smart出處:http://www.survivalescaperooms.com/linlf03/歡迎任何形式的轉載,未經作者同意,請保留此段聲明!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北安市| 炎陵县| 沁阳市| 凤阳县| 大同市| 闽清县| 罗江县| 清流县| 昌宁县| 靖边县| 兰溪市| 云阳县| 同仁县| 合川市| 邵阳市| 岱山县| 彩票| 柞水县| 钦州市| 横峰县| 刚察县| 昭通市| 双鸭山市| 金湖县| 安仁县| 永修县| 建始县| 绥江县| 扶风县| 磐石市| 肥西县| 友谊县| 荣成市| 应城市| 易门县| 盘锦市| 铅山县| 乐陵市| 阳信县| 柳江县| 玛曲县|