C# XML操作

簡單記錄在C#操作XML語法

/*以下是在Web Application下使用時記下的筆記*/

//建立網頁相對路徑(App_Data目錄)
string RelativePath = "~/App_Data/" + xmlfilename + ".xml";

//在網站中取得檔案的絕對路徑
AbsoluePath = HttpContext.Current.Server.MapPath(RelativePath ).ToString();

//新增XML文件
XmlDocument xmldoc = new XmlDocument();

//從文字串載入XML
xmldoc.LoadXml(strXml);

//從檔案載入XML
//XML載入、寫入,必需是絕對路徑,相對路徑會被跟系統預設路徑整合,在路徑中多了「~」號,導致查不到
xmldoc.Load(AbsoluePath);

//將XML寫入檔案
//XML載入、寫入,必需是絕對路徑,相對路徑會被跟系統預設路徑整合,在路徑中多了「~」號,導致查不到
xmldoc.Save(AbsoluePath);

 

//選取單一節點
XmlNode xmlnode = xmldoc.SelectSingleNode("nodename");

//讀取單一節點已存在屬性值
string attValue = xmlnode.Attributes["AttributeName"].Value;

//新增節點(觀念:在xmldoc下新增某個元素,再把元素附加在xmldoc的子節點下)
//這裡建立的是根節點名稱為"xmlelement"→  <xmlelement />
XmlElement xmlelement =  xmldoc.CreateElement("xmlelement");
xmldoc.AppendChild(xmlelement);

//新增屬性(觀念:在xmldoc下新增某個屬性,再把屬性附加到某個元素,最後把那個元素附加在xmldoc的子節點)
//承上→  <xmlelement attname_a="attvalue_a" />
XmlAttribute xml_attribute_a = xmldoc.CreateAttribute("attname_a");
xml_attribute_a.Value = "attvalue_a";
xmlelement.Attributes.Append(xml_attribute_a);
xmldoc.AppendChild(xmlelement);

//導出XMLDoc內容
xmldoc.OuterXml;

//取得NodeList(可能很多節點時)
XmlNodeList xmlnodelist = xmldoc.GetElementsByTagName(elementname);


//一組建立xmldoc,新增節點、新增屬性的範例
XmlDocument xmldoc = new XmlDocument();
XmlElement xmlelement =  xmldoc.CreateElement("xmlelement");

XmlAttribute xml_attribute_a = xmldoc.CreateAttribute("attname_a");
xml_attribute_a.Value = "attvalue_a";

XmlAttribute xml_attribute_b = xmldoc.CreateAttribute("attname_b");
xml_attribute_b.Value = "attvalue_b";

XmlAttribute xml_attribute_c = xmldoc.CreateAttribute("attname_c");
xml_attribute_c.Value = "attvalue_c";

xmlelement.Attributes.Append(xml_attribute_a);
xmlelement.Attributes.Append(xml_attribute_b);
xmlelement.Attributes.Append(xml_attribute_c);

xmldoc.AppendChild(xmlelement);

//操作檔案系統建立新XML「檔案」
//這裡是先建立空檔,再提供其它地方Load使用,不能直接用xmldoc.Save(路徑) 方式建新實體檔案
//也有在網路看到是將XML先建立在memory stream 再寫檔的
using (XmlWriter writer = XmlWriter.Create(AbsoluePath))
{
    writer.WriteStartElement(rootelename);
    writer.WriteEndElement();
    writer.Flush();
}