DOM の要素に対する新しい属性の作成Creating New Attributes for Elements in the DOM

属性はノードではなく、要素ノードのプロパティであり、要素に関連付けられた XmlAttributeCollection に格納されるため、新しい属性を作成する方法は、他のノード型を作成する方法と異なります。Creating new attributes is different than creating other node types, because attributes are not nodes, but are properties of an element node and are contained in an XmlAttributeCollection associated with the element. 属性を作成して要素に追加するには、次の 2 つの方法があります。There are multiple ways to create an attribute and attach it to an element:

  • 要素ノードを取得し、SetAttribute を使用してその要素の属性コレクションに属性を追加します。Get the element node and use SetAttribute to add an attribute to the attribute collection of that element.

  • CreateAttribute メソッドを使用して XmlAttribute ノードを作成します。要素ノードを取得し、SetAttributeNode を使用してその要素の属性コレクションにノードを追加します。Create an XmlAttribute node using the CreateAttribute method, get the element node, then use SetAttributeNode to add the node to the attribute collection of that element.

次の例は、 SetAttributeメソッドを使用して要素に属性を追加する方法を示しています。The following example shows how to add an attribute to an element using the SetAttribute method:

Imports System.IO
Imports System.Xml

Public Class Sample

    Public Shared Sub Main()

        Dim doc As New XmlDocument()
        doc.LoadXml("<book xmlns:bk='urn:samples' bk:ISBN='1-861001-57-5'>" & _
                    "<title>Pride And Prejudice</title>" & _
                    "</book>")
        Dim root As XmlElement = doc.DocumentElement

        ' Add a new attribute.
        root.SetAttribute("genre", "urn:samples", "novel")

        Console.WriteLine("Display the modified XML...")
        Console.WriteLine(doc.InnerXml)
    End Sub
End Class
using System;
using System.IO;
using System.Xml;

public class Sample
{
    public static void Main()
    {
        var doc = new XmlDocument();
        doc.LoadXml("<book xmlns:bk='urn:samples' bk:ISBN='1-861001-57-5'>" +
                    "<title>Pride And Prejudice</title>" +
                    "</book>");
        XmlElement root = doc.DocumentElement;

        // Add a new attribute.
        root.SetAttribute("genre", "urn:samples", "novel");

        Console.WriteLine("Display the modified XML...");
        Console.WriteLine(doc.InnerXml);
    }
}

CreateAttribute メソッドを使用して新しい属性を作成する例を次に示します。The following example shows a new attribute being created using the CreateAttribute method. 属性の作成後、SetAttributeNode メソッドを使用して、その属性を book 要素の属性コレクションに追加します。It then shows the attribute added to the attribute collection of the book element using the SetAttributeNode method.

次の XML を使用します。Given the following XML:

<book genre='novel' ISBN='1-861001-57-5'>
<title>Pride And Prejudice</title>
</book>

新しい属性を作成し、その属性の値を設定します。create a new attribute and give it a value:

Dim attr As XmlAttribute = doc.CreateAttribute("publisher")
attr.Value = "WorldWide Publishing"
XmlAttribute attr = doc.CreateAttribute("publisher");
attr.Value = "WorldWide Publishing";

作成した属性を要素に追加します。and attach it to the element:

doc.DocumentElement.SetAttributeNode(attr)
doc.DocumentElement.SetAttributeNode(attr);

出力Output

<book genre="novel" ISBN="1-861001-57-5" publisher="WorldWide Publishing">
<title>Pride And Prejudice</title>
</book>

完全なコード サンプルは CreateAttribute にあります。The full code sample can be found at CreateAttribute.

XmlAttribute ノードを作成した後、InsertBefore メソッドまたは InsertAfter メソッドを使用して、コレクション内の適切な位置にそのノードを配置することもできます。You can also create an XmlAttribute node and use the InsertBefore or InsertAfter methods to place it in the appropriate position in the collection. 同じ名前の属性が属性コレクションに既に含まれている場合、既存の XmlAttribute ノードはコレクションから削除され、新しい XmlAttribute ノードが挿入されます。If an attribute with the same name is already present in the attribute collection, the existing XmlAttribute node is removed from the collection and the new XmlAttribute node is inserted. これは、SetAttribute メソッドで行われる処理と同じです。This performs the same way as the SetAttribute method. これらのメソッドは、InsertBeforeInsertAfter を実行するときに、参照ポイントとなる既存のノードをパラメーターとして受け取ります。These methods take, as a parameter, an existing node as a reference point to do the InsertBefore and InsertAfter. 新しいノードの挿入位置を示す参照ノードが指定されていないと、InsertAfter メソッドは、既定でコレクションの先頭に新しいノードを挿入します。If you do not provide a reference node indicating where to insert the new node, the default for the InsertAfter method is to insert the new node at the beginning of the collection. 参照ノードが指定されなかった場合の InsertBefore の既定の挿入位置は、コレクションの末尾です。The default position for the InsertBefore, if no reference node is provided, is at the end of the collection.

属性のXmlnamednodemapを作成した場合は、SetNamedItem メソッドを使用して、名前を指定して属性を追加できます。If you created an XmlNamedNodeMap of attributes, you can add an attribute by name using the SetNamedItem method. 詳細については、「NamedNodeMaps と NodeLists のノード コレクション」を参照してください。For more information, see Node Collections in NamedNodeMaps and NodeLists.

既定の属性Default attributes

既定の属性を持つと宣言された要素を作成すると、既定値を持つ新しい既定の属性が XML ドキュメント オブジェクト モデル (DOM) によって作成され、その要素に割り当てられます。If you create an element that is declared to have a default attribute, then a new default attribute with its default value is created by the XML Document Object Model (DOM) and attached to the element. 既定の属性の子ノードも同時に作成されます。The child nodes of the default attribute are also created at this time.

属性子ノードAttribute child nodes

属性ノードの値は、その属性の子ノードになります。The value of an attribute node becomes its child nodes. 有効な子ノードには、 XmlTextノードとxmlentityreferenceノードの2種類しかありません。There are only two types of valid child nodes: XmlText nodes and XmlEntityReference nodes. これらのノードは、FirstChildLastChild のようなメソッドが子ノードとして処理するという意味で、子ノードと見なされます。These are child nodes in the sense that methods such as FirstChild and LastChild process them as child nodes. 属性が子ノードを持つという点は、属性または属性の子ノードを削除するときに重要になります。This distinction of an attribute having child nodes is important when trying to remove attributes or attribute child nodes. 詳細については、「DOM の要素ノードからの属性の削除」を参照してください。For more information, see Removing Attributes from an Element Node in the DOM.

関連項目See also