WriteAttributeString、WriteStartAttribute、および WriteAttributes は、特に属性の作成のために用意されたメソッドです。 これらのメソッドにより、要素ノードに属性を書き込むことができます。 属性の書き込みメソッドは、要素に名前空間宣言を作成するためにも使用できます。 詳細については、「XmlWriter における名前空間の処理」を参照してください。
WriteAttributeString
WriteAttributeString メソッドは、属性を書き込むための最も簡単な方法です。 このメソッドは、文字列値も含め、属性ノード全体を書き込むために使用されます。 次に示すコードは、属性 (supplierID) と値 (A23-1) を XML 要素 (Product) に追加します。
Dim settings As New XmlWriterSettings()
settings.Indent = True
Using writer As XmlWriter = XmlWriter.Create(Console.Out, settings)
writer.WriteStartElement("Product")
writer.WriteAttributeString("supplierID", "A23-1")
writer.WriteElementString("ProductID", "12345")
writer.WriteEndElement()
End Using
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(Console.Out, settings))
{
writer.WriteStartElement("Product");
writer.WriteAttributeString("supplierID", "A23-1");
writer.WriteElementString("ProductID", "12345");
writer.WriteEndElement();
}
前のコードを実行すると、次の出力がコンソールに表示されます。
<Product supplierID="A23-1">
<ProductID>12345</ProductID>
</Product>
WriteStartAttribute
WriteStartAttribute メソッドは、WriteAttributeString メソッドのより進んだバージョンです。 このメソッドでは、複数のメソッド呼び出しを使用して属性値を書くことができます。 たとえば、WriteValue を使用して型指定された値を書くことができます。
属性は WriteEndAttribute メソッドを呼ぶことで閉じることができます。
次のコードで hireDate は、社員の入社年月日を格納する DateTime オブジェクトです。 このコードは、半年後の人事評価日の計算値を格納する review-date 属性を書き込みます。
Dim hireDate As New DateTime(2008, 5, 20)
Dim settings As New XmlWriterSettings()
settings.Indent = True
Using writer As XmlWriter = XmlWriter.Create(Console.Out, settings)
writer.WriteStartElement("Employee")
writer.WriteStartAttribute("review-date")
writer.WriteValue(hireDate.AddMonths(6))
writer.WriteEndAttribute()
writer.WriteElementString("EmployeeID", "12345")
writer.WriteEndElement()
End Using
DateTime hireDate = new DateTime(2008, 5, 20);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(Console.Out, settings))
{
writer.WriteStartElement("Employee");
writer.WriteStartAttribute("review-date");
writer.WriteValue(hireDate.AddMonths(6));
writer.WriteEndAttribute();
writer.WriteElementString("EmployeeID", "12345");
writer.WriteEndElement();
}
前のコードを実行すると、次の出力がコンソールに表示されます。
<Employee review-date="2008-11-20T00:00:00">
<EmployeeID>12345</EmployeeID>
</Employee>
WriteAttributes
WriteAttributes メソッドは、指定された XmlReader オブジェクトの現在の位置で見つかるすべての属性をコピーします。 WriteAttributes の動作は、リーダーが現在位置するノードの型により異なります。
各ノード型について、WriteAttributes を呼び出したときの結果を次の表に示します。 下の表に一覧されていないノード型の上にリーダーが位置していた場合、WriteAttributes は何も行いません。
ノード型 |
WriteAttributes の動作 |
---|---|
属性 |
現在の属性を書き込み、次に終了タグが来るまで残りの属性を書き込みます。 |
要素 |
要素が持つすべての属性を書き込みます。 |
XML 宣言 |
宣言内のすべての属性を書き込みます。 |
たとえば、次のコードで、ライターは現在のリーダーの位置に見つかるすべての属性をコピーします。
Dim reader As XmlReader = XmlReader.Create("book.xml")
reader.ReadToDescendant("book")
Dim settings As New XmlWriterSettings()
settings.Indent = True
Using writer As XmlWriter = XmlWriter.Create(Console.Out, settings)
writer.WriteStartElement("root")
writer.WriteAttributes(reader, True)
writer.WriteEndElement()
End Using
XmlReader reader = XmlReader.Create("book.xml");
reader.ReadToDescendant("book");
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(Console.Out, settings))
{
writer.WriteStartElement("root");
writer.WriteAttributes(reader, true);
writer.WriteEndElement();
}
コードでは、次の XML ファイルの例 (book.xml) を使用します。
<?xml version="1.0" ?>
<book genre="autobiography"
publicationdate="1981"
ISBN="1-861003-11-0">Book Title</book>
前のコードを実行すると、次の出力がコンソールに表示されます。
<root genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0" />