次の方法で共有


属性の書き込み

WriteAttributeStringWriteStartAttribute、および 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" />

参照

その他の技術情報

XmlWriter による XML の書き方