豚吐露@wiki

XMLの操作関係で苦労してるからまとめとく

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可

XMLの操作関係で苦労してるからまとめとく

Visual Studio 2013 Professional
C# 4.5
Windows 7 Professional

  • XmlDocument
  • XmlElement
  • XmlAttribute

■読み込み

XmlDocumentインスタンス作って
XmlDocument xmldoc = new XmlDocument();
ファイルから読み込む場合、インスタンスのメソッドを使う。
xmldoc.Load(path);
文字列から読み込む場合、インスタンスのメソッドを使う。
xmldoc.LoadXml(xmlString);


  • XElement
  • XDocument
  • XAttribute

■読み込み

以下の方法を用いて、XDocumentもしくは、XElementのインスタンスを作成する。
ファイルからの読み込む場合、クラスの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だと思ってる。
こんな感じにしたらえぇと思ってます。
  1. static void Main(string[] args)
  2. {
  3. var xmlPath = @"C:\wk\tmp\sample.xml";
  4.  
  5. foreach (var xe in XElement.Load(xmlPath).Elements())
  6. {
  7. switch (xe.Name.ToString())
  8. {
  9. case "Id":
  10. Console.WriteLine(xe.Name + ":" + xe.Value);
  11. break;
  12.  
  13. case "Hoge":
  14. case "Hage":
  15. case "Fuga":
  16. Console.WriteLine(xe.Name);
  17.  
  18. foreach (var dt in xe.Element("Data").Elements())
  19. {
  20. Console.WriteLine(dt.Name + ":" + dt.Value);
  21.  
  22. if (dt.HasAttributes)
  23. {
  24. foreach (var attr in dt.Attributes())
  25. {
  26. Console.WriteLine("\t" + attr.Name + ":" + attr.Value);
  27. }
  28. }
  29. }
  30.  
  31. break;
  32.  
  33. default:
  34. break;
  35. }
  36. }
  37. }

XML同士の結合をしてみる。

  1. var xmlHoge = @"<Hoge><Id>1</Id><Name>Hoge</Name></Hoge>";
  2. var xmlFuga = @"<Fuga><URL>http://fuga.net/api/send</URL><Method>POST</Method></Fuga>";
  3.  
  4. var hoge = new XElement("Hoge");
  5. hoge.Add(XElement.Parse(xmlHoge).Nodes());
  6.  
  7. var fuga = new XElement("Fuga");
  8. fuga.Add(XElement.Parse(xmlFuga).Nodes());
  9.  
  10. var root = new XElement("Root");
  11. root.Add(hoge);
  12. root.Add(fuga);
すると、こうなる。

  1. <Root>
  2. <Hoge>
  3. <Id>1</Id>
  4. <Name>Hoge</Name>
  5. </Hoge>
  6. <Fuga>
  7. <URL>http://fuga.net/api/send</URL>
  8. <Method>POST</Method>
  9. </Fuga>
  10. </Root>
XDocumentってあんまし必要無いかもしれない...

fileから読み込む場合XmlReaderを使った方が良い

XDocumentだけじゃとfile lockされて、app落とすまで離してくれない...
以下sample。
  1. var dic = new Dictionary<string, string>();
  2. try
  3. {
  4. using(var render = XmlReader.Create(xml_path))
  5. {
  6. var ele = XDocument.Load(render).Root.Element("Root");
  7. if (ele == null) {
  8. return dic;
  9. }
  10.  
  11. foreach (var adjust in ele.Elements())
  12. {
  13. var key = adjust.Element("Key")?.Value;
  14. var val = adjust.Element("Val")?.Value;
  15. if(string.IsNullOrEmpty(key) || string.IsNullOrEmpty(val))
  16. {
  17. continue;
  18. }
  19. dic.Add(key, val);
  20. }
  21. }
  22. }
  23. catch (Exception e)
  24. {
  25. throw new XmlException("XMLが正しくありません。", e);
  26. }


  • XmlReader
  • XmlText



更新日: 2022年08月31日 (水) 10時17分02秒

名前:
コメント:

すべてのコメントを見る
記事メニュー
ウィキ募集バナー