DOM の属性へのアクセスAccessing Attributes in the DOM

属性は要素のプロパティであり、要素の子ではありません。Attributes are properties of the element, not children of the element. この区別は、XML ドキュメント オブジェクト モデル (DOM) の兄弟ノード、親ノード、および子ノードの間の移動に使用するメソッドで重要な意味を持ちます。This distinction is important because of the methods used to navigate sibling, parent, and child nodes of the XML Document Object Model (DOM). たとえば、PreviousSibling メソッドと NextSibling メソッドは、要素から属性への移動や属性間の移動には使われません。For example, the PreviousSibling and NextSibling methods are not used to navigate from an element to an attribute or between attributes. 属性は要素のプロパティであり、要素によって所有されているため、OwnerElement プロパティを持ちますが、parentNode プロパティはありません。また、移動には専用のメソッドを使います。Instead, an attribute is a property of an element and is owned by an element, has an OwnerElement property and not a parentNode property, and has distinct methods of navigation.

現在のノードが要素のとき、その要素に関連付けられている属性があるかどうかを調べるには、HasAttribute メソッドを使用します。When the current node is an element, use the HasAttribute method to see if there are any attributes associated with the element. 要素に属性がある場合は、各種のメソッドで属性にアクセスできます。Once it is known that an element has attributes, there are multiple methods for accessing attributes. XmlElementGetAttribute メソッドとGetAttributeNode メソッドを使用して要素から 1 つの属性を取得するか、すべての属性をコレクションとして取得することができます。To retrieve a single attribute from the element, you can use the GetAttribute and GetAttributeNode methods of the XmlElement or you can obtain all the attributes into a collection. コレクションに対して反復処理を行う必要がある場合は、コレクションを取得すると便利です。Obtaining the collection is useful if you need to iterate over the collection. 要素のすべての属性が必要な場合は、要素の Attributes プロパティを使用して、すべての属性をコレクションに取得できます。If you want all attributes from the element, use the Attributes property of the element to retrieve all the attributes into a collection.

コレクションへのすべての属性の取得Retrieving All Attributes into a Collection

要素ノードのすべての属性をコレクションに取得するには、XmlElement.Attributes プロパティを呼び出します。If you want all the attributes of an element node put into a collection, call the XmlElement.Attributes property. XmlElement.Attributes プロパティにより、要素のすべての属性を含む XmlAttributeCollection を取得できます。This gets the XmlAttributeCollection that contains all the attributes of an element. XmlAttributeCollection クラスは XmlNamedNode マップから継承されます。The XmlAttributeCollection class inherits from the XmlNamedNode map. このため、コレクションで使用できるメソッドとプロパティには、ItemOf プロパティや Append メソッドのような XmlAttributeCollection クラスに固有のメソッドやプロパティだけでなく、名前付きノード マップで使用できるメソッドとプロパティも含まれます。Therefore, the methods and properties available on the collection include those available on a named node map in addition to methods and properties specific to the XmlAttributeCollection class, such as the ItemOf property or the Append method. 属性コレクション内の各項目は、XmlAttribute ノードを表します。Each item in the attribute collection represents an XmlAttribute node. 要素の属性の数を調べるには、XmlAttributeCollection を取得し、Count プロパティを使用して、そのコレクションに含まれる XmlAttribute ノードの数を調べます。To find the number of attributes on an element, get the XmlAttributeCollection, and use the Count property to see how many XmlAttribute nodes are in the collection.

属性コレクションを取得し、Count メソッドをループ インデックスとして使用して、コレクションに対して反復処理を行うコード サンプルを次に示します。The following code example shows how to retrieve an attribute collection and, using the Count method for the looping index, iterate over it. このコードは、その後、コレクションから属性を 1 つ取得して、その値を表示します。The code then shows how to retrieve a single attribute from the collection and display its value.

Imports System.IO
Imports System.Xml

Public Class Sample

    Public Shared Sub Main()

        Dim doc As XmlDocument = New XmlDocument()
        doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5' misc='sale item'>" & _
               "<title>The Handmaid's Tale</title>" & _
               "<price>14.95</price>" & _
               "</book>")

        ' Move to an element.
        Dim myElement As XmlElement = doc.DocumentElement

        ' Create an attribute collection from the element.
        Dim attrColl As XmlAttributeCollection = myElement.Attributes

        ' Show the collection by iterating over it.
        Console.WriteLine("Display all the attributes in the collection...")
        Dim i As Integer
        For i = 0 To attrColl.Count - 1
            Console.Write("{0} = ", attrColl.ItemOf(i).Name)
            Console.Write("{0}", attrColl.ItemOf(i).Value)
            Console.WriteLine()
        Next

        ' Retrieve a single attribute from the collection; specifically, the
        ' attribute with the name "misc".
        Dim attr As XmlAttribute = attrColl("misc")

        ' Retrieve the value from that attribute.
        Dim miscValue As String = attr.InnerXml

        Console.WriteLine("Display the attribute information.")
        Console.WriteLine(miscValue)

    End Sub
End Class
using System;
using System.IO;
using System.Xml;

public class Sample
{

    public static void Main()
    {
        XmlDocument doc = new XmlDocument();
        doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5' misc='sale item'>" +
                      "<title>The Handmaid's Tale</title>" +
                      "<price>14.95</price>" +
                      "</book>");

        // Move to an element.
        XmlElement myElement = doc.DocumentElement;

        // Create an attribute collection from the element.
        XmlAttributeCollection attrColl = myElement.Attributes;

        // Show the collection by iterating over it.
        Console.WriteLine("Display all the attributes in the collection...");
        for (int i = 0; i < attrColl.Count; i++)
        {
            Console.Write("{0} = ", attrColl[i].Name);
            Console.Write("{0}", attrColl[i].Value);
            Console.WriteLine();
        }

        // Retrieve a single attribute from the collection; specifically, the
        // attribute with the name "misc".
        XmlAttribute attr = attrColl["misc"];

        // Retrieve the value from that attribute.
        String miscValue = attr.InnerXml;

        Console.WriteLine("Display the attribute information.");
        Console.WriteLine(miscValue);

    }
}

この例を実行すると、次の出力が表示されます。This example displays the following output:

出力Output

コレクション内のすべての属性を表示します。Display all the attributes in the collection.

genre = novel
ISBN = 1-861001-57-5
misc = sale item
Display the attribute information.
sale item

属性コレクションの情報は、名前またはインデックス番号によって取得できます。The information in an attribute collection can be retrieved by name or index number. 上の例では、名前を指定してデータを取得しています。The example above shows how to retrieve data by name. 次の例では、インデックス番号を指定してデータを取得します。The next example shows how to retrieve data by index number.

XmlAttributeCollection はコレクションであり、名前またはインデックスを使って反復処理ができるため、次の例では、ゼロベースのインデックスを使用してコレクションの最初の属性を選択しています。入力には、baseuri.xml というファイルを使用しています。Because the XmlAttributeCollection is a collection and can be iterated over by name or index, this example shows selecting the first attribute out of the collection using a zero-based index and using the following file, baseuri.xml, as input.

入力Input

<!-- XML fragment -->
<book genre="novel">
  <title>Pride And Prejudice</title>
</book>
Option Explicit On
Option Strict On

Imports System.IO
Imports System.Xml

Public Class Sample

    Public Shared Sub Main()
        ' Create the XmlDocument.
        Dim doc As New XmlDocument()
        doc.Load("http://localhost/baseuri.xml")

        ' Display information on the attribute node. The value
        ' returned for BaseURI is 'http://localhost/baseuri.xml'.
        Dim attr As XmlAttribute = doc.DocumentElement.Attributes(0)
        Console.WriteLine("Name of the attribute:  {0}", attr.Name)
        Console.WriteLine("Base URI of the attribute:  {0}", attr.BaseURI)
        Console.WriteLine("The value of the attribute:  {0}", attr.InnerText)
    End Sub 'Main
End Class 'Sample
using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {
    // Create the XmlDocument.
    XmlDocument doc = new XmlDocument();

    doc.Load("http://localhost/baseuri.xml");

    // Display information on the attribute node. The value
    // returned for BaseURI is 'http://localhost/baseuri.xml'.
    XmlAttribute attr = doc.DocumentElement.Attributes[0];
    Console.WriteLine("Name of the attribute:  {0}", attr.Name);
    Console.WriteLine("Base URI of the attribute:  {0}", attr.BaseURI);
    Console.WriteLine("The value of the attribute:  {0}", attr.InnerText);
  }
}

個別の属性ノードの取得Retrieving an Individual Attribute Node

要素から属性ノードを 1 つ取得するには、XmlElement.GetAttributeNode メソッドを使用します。To retrieve a single attribute node from an element, the XmlElement.GetAttributeNode method is used. このメソッドは、XmlAttribute 型のオブジェクトを返します。It returns an object of type XmlAttribute. XmlAttribute の取得後は、System.Xml.XmlAttribute クラスのすべてのメソッドとプロパティを使用できます。たとえば、OwnerElement で、どの要素に所属しているかを調べることができます。Once you have an XmlAttribute, all the methods and properties available in the System.Xml.XmlAttribute class are available on that object, such as finding the OwnerElement.

Imports System.IO
Imports System.Xml

Public Class Sample

    Public Shared Sub Main()

        Dim doc As XmlDocument = New XmlDocument()
        doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5' misc='sale item'>" & _
               "<title>The Handmaid's Tale</title>" & _
               "<price>14.95</price>" & _
               "</book>")

        ' Move to an element.
        Dim root As XmlElement
        root = doc.DocumentElement

        ' Get an attribute.
        Dim attr As XmlAttribute
        attr = root.GetAttributeNode("ISBN")

        ' Display the value of the attribute.
        Dim attrValue As String
        attrValue = attr.InnerXml
        Console.WriteLine(attrValue)

    End Sub
End Class
using System;
using System.IO;
using System.Xml;

 public class Sample
 {
      public static void Main()
      {
    XmlDocument doc = new XmlDocument();
     doc.LoadXml("<book genre='novel' ISBN='1-861003-78' misc='sale item'>" +
                   "<title>The Handmaid's Tale</title>" +
                   "<price>14.95</price>" +
                   "</book>");

    // Move to an element.
     XmlElement root = doc.DocumentElement;

    // Get an attribute.
     XmlAttribute attr = root.GetAttributeNode("ISBN");

    // Display the value of the attribute.
     String attrValue = attr.InnerXml;
     Console.WriteLine(attrValue);

    }
}

前の例で示したように、属性コレクションから 1 つの属性ノードを取得することもできます。You can also do as shown in the previous example, where a single attribute node is retrieved from the attribute collection. インデックス番号を指定して、XML ドキュメント ツリーのルートから 1 つの属性を取得する処理を 1 行で記述したコード サンプルを次に示します。DocumentElement プロパティを使用します。The following code example shows how one line of code can be written to retrieve a single attribute by index number from the root of the XML document tree, also known as the DocumentElement property.

XmlAttribute attr = doc.DocumentElement.Attributes[0];

関連項目See also