C# XML解析方式執行個體解析 (帶命名空間的)

來源:互聯網
上載者:User

 

http://www.csharpwin.com/csharpspace/3968r4687.shtml

 

 C# XML解析通過XPath的方式的步驟:

    1、需要先載入文檔,然後再讀取想要的節點值。

    ◆xml文檔

    protected XmlDocument doc = null;

    ◆xml文檔的根項目(節點)

    protected XmlElement root = null;

    ◆xml文檔的名空間管理器

    protected XmlNamespaceManager nsmgr = null;

    2、接下來就是載入文檔了

  1. protected void LoadXmlFile(FileInfo xmlFile)
  2. {
  3. if (xmlFile == null || !xmlFile.Exists)
  4. {
  5. throw new FileNotFoundException(
  6. string.Format("要解析的檔案不存在{0}。",
  7. xmlFile.FullName));
  8. }
  9. //負載檔案
  10. this.doc = new XmlDocument();
  11. doc.Load(xmlFile.FullName);
  12. //準備讀取檔案
  13. root = doc.DocumentElement;
  14. string nameSpace = root.NamespaceURI;
  15. nsmgr = new XmlNamespaceManager(doc.NameTable);
  16. nsmgr.AddNamespace("ns", nameSpace);
  17. }

    ◆C# XML解析通過XPath的方式要注意。

    a、這兩行是取得xml文檔的名空間

  1. root = doc.DocumentElement;
  2. string nameSpace = root.NamespaceURI;

    b、這兩行是建立xml文檔的名空間管理器

  1. nsmgr = new XmlNamespaceManager(doc.NameTable);
  2. nsmgr.AddNamespace("ns", nameSpace);

    如果你的xml文檔有名空間,則這部分的代碼是必不可少的。

    3、接下來就是讀取文檔節點的值了

    這裡兩個傳入參數prefixPath是節點的上級節點路徑,xRelativePath是要讀取的節點名稱。

    另外,變數XmlFileInfo是要載入的xml檔案。

  1. protected string GetNodeValue(
  2. string prefixPath, string xRelativePath)
  3. {
  4. if (doc == null)
  5. {
  6. LoadXmlFile(XmlFileInfo);
  7. }
  8. string xPath = string.Empty;
  9. if (!string.IsNullOrEmpty(xRelativePath))
  10. {
  11. if (!string.IsNullOrEmpty(prefixPath))
  12. {
  13. xPath = prefixPath + xRelativePath;
  14. }
  15. else
  16. {
  17. xPath = xRelativePath;
  18. }
  19. }
  20. xPath = xPath.Replace("/", "/ns:");
  21. XmlNode node = root.SelectSingleNode(xPath, nsmgr);
  22. if (node == null)
  23. {
  24. return null;
  25. }
  26. return node.InnerXml;
  27. }

    可能有的朋友要問,為什麼要設定兩個參數prefixPath和xRelativePath呢,其實這個沒有多大的關係,我只是為了自己覺得方便,你也可以在方法外確定了這個XPath,在方法中只設定一個傳入參數,效果是一樣的。

    ◆注意這一行:

  1. xPath = xPath.Replace("/", "/ns:");

    如果你的xml文檔帶名空間,則這行是比不可少的,否則會出現找不到節點,無法解析的情況。

    關於XPath的一些問題:

    對於這樣一個xml文檔,要尋找第一個節點下的學生的Name時(ID=01),其XPath應該是"/ns:Root/ns:Students/ns:Student[1]/ns:Name"。xml對於重複的節點名稱,是按照順序1,2,3...的方式遍曆的,也就是說如果要找第N個Student節點的下的節點之,那麼應使用Student[N]的標識方式。

  1. ﹤?xml version="1.0" encoding="UTF-8" ?﹥
  2. ﹤Root xmlns="urn:ClassNameSpace"﹥
  3. ﹤Class﹥
  4. ﹤ClassID﹥1234﹤/ClassID﹥
  5. ﹤/Class﹥
  6. ﹤Students﹥
  7. ﹤Student﹥
  8. ﹤ID﹥01﹤/ID﹥﹤Name﹥Name01﹤/Name﹥
  9. ﹤/Student﹥
  10. ﹤Student﹥
  11. ﹤ID﹥02﹤/ID﹥﹤Name﹥Name02﹤/Name﹥
  12. ﹤/Student﹥
  13. ﹤/Students﹥
  14. ﹤/Root﹥

    當然,這裡也可以擷取節點屬性的值,尋找滿足特定值的節點等等,這些和上面擷取節點值的過程是類似的。

    C# XML解析通過XPath的方式的實現就向你介紹到這裡,希望對你瞭解和學習C# XML解析有所協助。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.