豚吐露@wiki
XMLの操作関係で苦労してるからまとめとく
最終更新:
Bot(ページ名リンク)
-
view
XMLの操作関係で苦労してるからまとめとく
- XmlDocument
- XmlElement
- XmlAttribute
■読み込み
XmlDocumentインスタンス作って
XmlDocument xmldoc = new XmlDocument();
ファイルから読み込む場合、インスタンスのメソッドを使う。
xmldoc.Load(path);
文字列から読み込む場合、インスタンスのメソッドを使う。
xmldoc.LoadXml(xmlString);
- XElement
- XDocument
- XAttribute
■読み込み
以下の方法を用いて、XDocumentもしくは、XElementのインスタンスを作成する。
ファイルからの読み込む場合、クラスのStaticメソッドを使う。
ファイルからの読み込む場合、クラスのStaticメソッドを使う。
XDocument xdoc = XDocument.Load(path); XElement xele = XElement.Load(path);
XML文字列からの読み込む場合、クラスのStaticメソッドを使う。
XDocument xdoc = XDocument.Parse(xmlString); XElement xele = XElement.Parse(xmlString);
個人的に、現状のC#でxmlを扱うならXElementだと思ってる。
こんな感じにしたらえぇと思ってます。
こんな感じにしたらえぇと思ってます。
- static void Main(string[] args)
- {
- var xmlPath = @"C:\wk\tmp\sample.xml";
-
- foreach (var xe in XElement.Load(xmlPath).Elements())
- {
- switch (xe.Name.ToString())
- {
- case "Id":
- Console.WriteLine(xe.Name + ":" + xe.Value);
- break;
-
- case "Hoge":
- case "Hage":
- case "Fuga":
- Console.WriteLine(xe.Name);
-
- foreach (var dt in xe.Element("Data").Elements())
- {
- Console.WriteLine(dt.Name + ":" + dt.Value);
-
- if (dt.HasAttributes)
- {
- foreach (var attr in dt.Attributes())
- {
- Console.WriteLine("\t" + attr.Name + ":" + attr.Value);
- }
- }
- }
-
- break;
-
- default:
- break;
- }
- }
- }
XML同士の結合をしてみる。
- var xmlHoge = @"<Hoge><Id>1</Id><Name>Hoge</Name></Hoge>";
- var xmlFuga = @"<Fuga><URL>http://fuga.net/api/send</URL><Method>POST</Method></Fuga>";
-
- var hoge = new XElement("Hoge");
- hoge.Add(XElement.Parse(xmlHoge).Nodes());
-
- var fuga = new XElement("Fuga");
- fuga.Add(XElement.Parse(xmlFuga).Nodes());
-
- var root = new XElement("Root");
- root.Add(hoge);
- root.Add(fuga);
すると、こうなる。
- <Root>
- <Hoge>
- <Id>1</Id>
- <Name>Hoge</Name>
- </Hoge>
- <Fuga>
- <URL>http://fuga.net/api/send</URL>
- <Method>POST</Method>
- </Fuga>
- </Root>
XDocumentってあんまし必要無いかもしれない...
fileから読み込む場合XmlReaderを使った方が良い
XDocumentだけじゃとfile lockされて、app落とすまで離してくれない...
以下sample。
以下sample。
- var dic = new Dictionary<string, string>();
- try
- {
- using(var render = XmlReader.Create(xml_path))
- {
- var ele = XDocument.Load(render).Root.Element("Root");
- if (ele == null) {
- return dic;
- }
-
- foreach (var adjust in ele.Elements())
- {
- var key = adjust.Element("Key")?.Value;
- var val = adjust.Element("Val")?.Value;
- if(string.IsNullOrEmpty(key) || string.IsNullOrEmpty(val))
- {
- continue;
- }
- dic.Add(key, val);
- }
- }
- }
- catch (Exception e)
- {
- throw new XmlException("XMLが正しくありません。", e);
- }
- XmlReader
- XmlText
更新日: 2022年08月31日 (水) 10時17分02秒