XML——c#讀取帶命名空間的xml

使用C#讀取xml文件有三種常用的方式:
1、xmlDocument
2、XmlTextReader
3、Linq To Xml
但是這些方式在讀寫有些帶命名空間的xml時就不知道怎麼辦了(例如把xaml文件當作xml文件來讀寫的時候)。
對於xaml文件,C#雖然能用XamlReader直接把xaml文件轉換爲對象,但是有的時候我們只是想取得其中一些字段,並不想轉換爲對象。
本文就以讀取xml方式來讀寫xaml,給大家做一個示範。

其中xaml文件如下所示,文件名爲test.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <sys:String x:Key="testkey">testStringInnerText</sys:String>
</ResourceDictionary>

1、讀取xaml節點。

             XmlDocument xmlDoc = new XmlDocument();
             xmlDoc.Load("D:\\test.xaml");
 
             //添加命名空間,這一步一定要有,否則讀取不了
             XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(xmlDoc.NameTable);
             xmlNamespaceManager.AddNamespace("x", "http://schemas.micorsoft.com/winfx/2006/xaml");
             xmlNamespaceManager.AddNamespace("sys", "clr-namespace:System;assembly=mscorlib");
 
 
             XmlNodeList xmlNodeList = xmlDoc.DocumentElement.ChildNodes;
             foreach (XmlNode childXmlNode in xmlNodeList)
             {
                 //讀取數據節點(sys:String)
                 string childName = childXmlNode.Name;
                 //讀取屬性值(testKey)
                 string childAttributesValue = childXmlNode.Attributes["x:Key"].Value;
                 //讀取節點文本(testStringInnerText)
                 string childInnerText = childXmlNode.InnerText;
                 //讀取子節點
                 XmlNodeList childXmlNodeList = childXmlNode.ChildNodes;
             }


2、寫入 xaml 節點

var rootXmlDocument=new XmlDocument();
  
  XmlNode xmlNode=new XmlNode();
 //需要在這裏生成一個xmlNode節點...
 //...
 //然後用appendchild方法插入
  rootXmlDocument.AppendChild(xmlNode);
  XmlElement rootXmlElement=(XmlElement)rootXmlDocument.ChildNodes[0];
  
 //設置命名空間
  rootXmlElement.SetAttribute("xmlns","http://schemas.microsoft.com/winfx/2006/xaml/presentation");
  rootXmlElement.SetAttribute("xmlns:x","http://schemas.microsoft.com/winfx/2006/xaml");
  rootXmlElement.SetAttribute("xmlns:sys","clr-namespace:System;assembly=mscorlib");
  
  rootXmlDocument.Save("D:\\test.xaml");

以上轉載自:http://www.cnblogs.com/Leaco/p/3170729.html

發佈了177 篇原創文章 · 獲贊 88 · 訪問量 83萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章