Quantcast
Channel: yotiky Tech Blog
Viewing all articles
Browse latest Browse all 60

C# - XmlWriter の使い方

$
0
0

learn.microsoft.com

適用対象は、.NET Framework 1.1 以降。

目次

検証環境

  • LINQPad 7
  • .NET 7.0

XmlWriter の使い方

ファイルに書き込む

var path =@"C:\Workspace\LINQPad Queries\XML\PurchaseOrder_copy.xml";

    var settings =new XmlWriterSettings
    {
        OmitXmlDeclaration =true,
        Indent =true,
    };

    using (var xw = XmlWriter.Create(path, settings))
    {
        xw.WriteStartElement("PurchaseOrder");
        xw.WriteAttributeString("PurchaseOrderNumber", "99503");
        xw.WriteAttributeString("OrderDate", "1999-10-20");
        xw.WriteStartElement("Address");
        xw.WriteAttributeString("Type", "Shipping");
        xw.WriteElementString("Name", "Ellen Adams");
        xw.WriteElementString("Street", "123 Maple Street");
        xw.WriteElementString("City", "Mill Valley");
        xw.WriteElementString("State", "CA");
        xw.WriteElementString("Zip", "10999");
        xw.WriteElementString("Country", "USA");
        xw.WriteEndElement();
        xw.WriteEndElement();
    };

実行結果。

<PurchaseOrder PurchaseOrderNumber="99503"OrderDate="1999-10-20"><Address Type="Shipping"><Name>Ellen Adams</Name><Street>123 Maple Street</Street><City>Mill Valley</City><State>CA</State><Zip>10999</Zip><Country>USA</Country></Address></PurchaseOrder>
  • 上から逐次書き込む
  • OmitXmlDeclarationを設定するとXML宣言を除外できる
  • Indentを設定しないと改行もインデントも含まれない連結した文字列が書き出される
  • 子要素がある場合は、WriteStartElementWriteEndElementで処理を囲む
  • 子要素がなく値を持つタグなら、WriteElementString
  • 属性は、WriteAttributeString

string に書き込む

XmlWriterSettingsAsyncを true して設定することで非同期で呼び出せる。

var settings =new XmlWriterSettings
    {
        Async =true,
        Indent =true,
    };

    using (var sr =new StringWriter())
    using (var xw = XmlWriter.Create(sr, settings))
    {
        await xw.WriteStartElementAsync("x", "root", "http://ns");
        xw.WriteStartElement("PurchaseOrder");
        xw.WriteAttributeString("PurchaseOrderNumber", "99503");
        xw.WriteAttributeString("OrderDate", "1999-10-20");
        xw.WriteStartElement("Address");
        xw.WriteAttributeString("Type", "Shipping");
        xw.WriteElementString("Name", "Ellen Adams");
        xw.WriteElementString("Street", "123 Maple Street");
        xw.WriteElementString("City", "Mill Valley");
        xw.WriteElementString("State", "CA");
        xw.WriteElementString("Zip", "10999");
        xw.WriteElementString("Country", "USA");
        xw.WriteEndElement();
        xw.WriteEndElement();
        await xw.WriteEndElementAsync();
        xw.Close();
        
        sr.ToString().Dump();
    }

実行結果。

<?xml version="1.0" encoding="utf-16"?><x:root xmlns:x="http://ns"><PurchaseOrder PurchaseOrderNumber="99503"OrderDate="1999-10-20"><Address Type="Shipping"><Name>Ellen Adams</Name><Street>123 Maple Street</Street><City>Mill Valley</City><State>CA</State><Zip>10999</Zip><Country>USA</Country></Address></PurchaseOrder></x:root>

基本のキ

文字列をファイルに書き込む

var xml =@"<PurchaseOrder PurchaseOrderNumber=""99503"" OrderDate=""1999-10-20""><Address Type=""Shipping""><Name>Ellen Adams</Name><Street>123 Maple Street</Street><City>Mill Valley</City><State>CA</State><Zip>10999</Zip><Country>USA</Country></Address></PurchaseOrder>";

    var path =@"C:\Workspace\LINQPad Queries\XML\PurchaseOrder_copy.xml";

    using (var sw =new StreamWriter(path, false, Encoding.UTF8))
    {
        sw.Write(xml);
    };

参考

XmlWriterSettingsを細かく解説してくれてるサイト。

smdn.jp


Viewing all articles
Browse latest Browse all 60

Trending Articles