XmlDocumentクラス

XmlDocumentクラスを使用することで、XMLの作成や読み込みを容易に行えます。

クラス階層

  • Object
    • System.Xml.XmlNode
      • System.Xml.XmlDocument

メソッド

メソッド 機能
Save(String) 指定のファイルに書き込む
Load(String) 指定のURLから読み込む
LoadXml(String) 指定の文字列から読み込む
   
Methods - XmlDocument Class (System.Xml) | Microsoft Learn

Save()

public virtual void Save (string filename);
Save(String) - XmlDocument.Save Method (System.Xml) | Microsoft Learn
XmlDocument document = new XmlDocument();

XmlDeclaration declaration = document.CreateXmlDeclaration("1.0", "utf-8", null); // XML宣言
XmlElement root = document.CreateElement("root");

document.AppendChild(declaration);
document.AppendChild(root);

XmlElement e1 = document.CreateElement("e1");
XmlElement e2 = document.CreateElement("e2");

e1.SetAttribute("a1", "10"); // 属性
e2.SetAttribute("a2", "20"); // 属性

root.AppendChild(e1);
root.AppendChild(e2);

XmlElement e3 = document.CreateElement("e3");
XmlText v3 = document.CreateTextNode("ABC");

e3.SetAttribute("a3", "30");
e3.AppendChild(v3);

e2.AppendChild(e3);

// ファイルに保存する
document.Save("sample.xml");

このコードは、次のようなファイルを出力します。

<?xml version="1.0" encoding="utf-8"?>
<root>
  <e1 a1="10" />
  <e2 a2="20">
    <e3 a3="30">ABC</e3>
  </e2>
</root>

このとき既定でBOMありのUTF-8となるため、BOMなしとしたければEncodingを指定したStreamを介して書き込みます。xml - How can I remove the BOM from XmlTextWriter using C#? - Stack Overflow

XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new UTF8Encoding(false);

using (XmlWriter writer = XmlWriter.Create("sample.xml", settings))
{
    document.Save(writer);
}

Load()

public virtual void Load (string filename);
Load(String) - XmlDocument.Load Method (System.Xml) | Microsoft Learn
XmlDocument document = new XmlDocument();

// ファイルから読み込む
document.Load("sample.xml");

XmlElement root = document.DocumentElement;

XmlElement e1 = (XmlElement)root.ChildNodes[0];
XmlElement e2 = (XmlElement)root.ChildNodes[1];

string a1 = e1.GetAttribute("a1"); // "10"
string a2 = e2.GetAttribute("a2"); // "20"

bool b1 = e1.HasChildNodes; // false
bool b2 = e2.HasChildNodes; // true

XmlElement e3 = (XmlElement)e2.FirstChild;

string a3 = e3.GetAttribute("a3"); // "30"

XmlNode n3 = e3.FirstChild;
string v3 = n3.Value; // "ABC"

LoadXml()

public virtual void LoadXml (string xml);
XmlDocument.LoadXml(String) Method (System.Xml) | Microsoft Learn
XmlDocument document = new XmlDocument();

document.LoadXml("<A><B>C</B></A>");

CreateXmlDeclaration()

XML宣言のノードを作成できます。

public virtual System.Xml.XmlDeclaration CreateXmlDeclaration (
    hstring version,  // バージョン。必ず"1.0"
    string encoding,  // エンコーディング属性の値
    string standalone // スタンドアロン属性の値。"yes"または"no"
    );
XmlDocument.CreateXmlDeclaration(String, String, String) Method (System.Xml) | Microsoft Learn

XmlNodeクラス

SelectNodes()

XPath式に適合するノードのリストを取得できます。

public System.Xml.XmlNodeList SelectNodes (string xpath);
SelectNodes(String) - XmlNode.SelectNodes Method (System.Xml) | Microsoft Learn

XPath

XmlNodeList nodeList = root.SelectNodes("element[@attribute='abc']");

XmlElementクラス

クラス階層

  • Object
    • System.Xml.XmlNode
      • System.Xml.XmlLinkedNode
        • System.Xml.XmlElement

GetElementsByTagName()

指定の名前のタグを取得できます。

public virtual System.Xml.XmlNodeList GetElementsByTagName (string name);
GetElementsByTagName(String) - XmlElement.GetElementsByTagName Method (System.Xml) | Microsoft Learn

nameに一致したノードのリストが返されます。

Microsoft Learnから検索