適用対象は、.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
を設定しないと改行もインデントも含まれない連結した文字列が書き出される- 子要素がある場合は、
WriteStartElement
とWriteEndElement
で処理を囲む - 子要素がなく値を持つタグなら、
WriteElementString
- 属性は、
WriteAttributeString
string に書き込む
XmlWriterSettings
の Async
を 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
を細かく解説してくれてるサイト。