この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

XmlDocument クラス

 

公開日: 2016年7月

XML ドキュメントを表します。 このクラスを使用すると、XML のドキュメントへの読み込み、検証、編集、追加、および配置が可能です。

名前空間:   System.Xml
アセンブリ:  System.Xml (System.Xml.dll 内)

System.Object
  System.Xml.XmlNode
    System.Xml.XmlDocument
      System.Configuration.ConfigXmlDocument
      System.Xml.XmlDataDocument

public class XmlDocument : XmlNode

名前説明
System_CAPS_pubmethodXmlDocument()

XmlDocument クラスの新しいインスタンスを初期化します。

System_CAPS_protmethodXmlDocument(XmlImplementation)

指定した XmlDocument を使用して、XmlImplementation クラスの新しいインスタンスを初期化します。

System_CAPS_pubmethodXmlDocument(XmlNameTable)

指定した XmlDocument を使用して、XmlNameTable クラスの新しいインスタンスを初期化します。

名前説明
System_CAPS_pubpropertyAttributes

取得、 XmlAttributeCollection このノードの属性を含みます。(XmlNode から継承されます。)

System_CAPS_pubpropertyBaseURI

現在のノードのベース URI を取得します。(XmlNode.BaseURI をオーバーライドします。)

System_CAPS_pubpropertyChildNodes

ノードのすべての子ノードを取得します。(XmlNode から継承されます。)

System_CAPS_pubpropertyDocumentElement

ドキュメントのルート XmlElement を取得します。

System_CAPS_pubpropertyDocumentType

DOCTYPE 宣言を格納しているノードを取得します。

System_CAPS_pubpropertyFirstChild

ノードの最初の子を取得します。(XmlNode から継承されます。)

System_CAPS_pubpropertyHasChildNodes

このノードに子ノードがあるかどうかを示す値を取得します。(XmlNode から継承されます。)

System_CAPS_pubpropertyImplementation

現在のドキュメントの XmlImplementation オブジェクトを取得します。

System_CAPS_pubpropertyInnerText

常に InvalidOperationException をスローします。(XmlNode.InnerText をオーバーライドします。)

System_CAPS_pubpropertyInnerXml

現在のノードの子を表すマークアップを取得または設定します。(XmlNode.InnerXml をオーバーライドします。)

System_CAPS_pubpropertyIsReadOnly

現在のノードが読み取り専用かどうかを示す値を取得します。(XmlNode.IsReadOnly をオーバーライドします。)

System_CAPS_pubpropertyItem[String]

指定した最初の子要素を取得 Nameします。(XmlNode から継承されます。)

System_CAPS_pubpropertyItem[String, String]

指定した最初の子要素を取得 LocalNameNamespaceURIです。(XmlNode から継承されます。)

System_CAPS_pubpropertyLastChild

ノードの最後の子を取得します。(XmlNode から継承されます。)

System_CAPS_pubpropertyLocalName

ノードのローカル名を取得します。(XmlNode.LocalName をオーバーライドします。)

System_CAPS_pubpropertyName

ノードの限定名を取得します。(XmlNode.Name をオーバーライドします。)

System_CAPS_pubpropertyNamespaceURI

このノードの名前空間 URI を取得します。(XmlNode から継承されます。)

System_CAPS_pubpropertyNameTable

この実装に関連付けられている XmlNameTable を取得します。

System_CAPS_pubpropertyNextSibling

このノードの直後のノードを取得します。(XmlNode から継承されます。)

System_CAPS_pubpropertyNodeType

現在のノードの種類を取得します。(XmlNode.NodeType をオーバーライドします。)

System_CAPS_pubpropertyOuterXml

このノードとそのすべての子ノードを格納しているマークアップを取得します。(XmlNode から継承されます。)

System_CAPS_pubpropertyOwnerDocument

現在のノードが属する XmlDocument を取得します。(XmlNode.OwnerDocument をオーバーライドします。)

System_CAPS_pubpropertyParentNode

このノードの親ノード (親を持つノードの場合) を取得します。(XmlNode.ParentNode をオーバーライドします。)

System_CAPS_pubpropertyPrefix

このノードの名前空間プリフィックスを取得または設定します。(XmlNode から継承されます。)

System_CAPS_pubpropertyPreserveWhitespace

要素のコンテンツにある空白を保存するかどうかを示す値を取得または設定します。

System_CAPS_pubpropertyPreviousSibling

このノードの直前のノードを取得します。(XmlNode から継承されます。)

System_CAPS_pubpropertyPreviousText

このノードの直前にあるテキスト ノードを取得します。(XmlNode から継承されます。)

System_CAPS_pubpropertySchemaInfo

ノードの PSVI (Post-Schema-Validation-Infoset) を返します。(XmlNode.SchemaInfo をオーバーライドします。)

System_CAPS_pubpropertySchemas

この XmlDocument に関連付けられている XmlSchemaSet オブジェクトを取得または設定します。

System_CAPS_pubpropertyValue

ノードの値を取得または設定します。(XmlNode から継承されます。)

System_CAPS_pubpropertyXmlResolver

外部リソースを解決するために使用する XmlResolver を設定します。

名前説明
System_CAPS_pubmethodAppendChild(XmlNode)

このノードの子ノードのリストの末尾に、指定したノードを追加します。(XmlNode から継承されます。)

System_CAPS_pubmethodClone()

このノードの複製を作成します。(XmlNode から継承されます。)

System_CAPS_pubmethodCloneNode(Boolean)

このノードの複製を作成します。(XmlNode.CloneNode(Boolean) をオーバーライドします。)

System_CAPS_pubmethodCreateAttribute(String)

指定した Name を使用して XmlAttribute を作成します。

System_CAPS_pubmethodCreateAttribute(String, String)

指定した限定名と NamespaceURI を使用して XmlAttribute を作成します。

System_CAPS_pubmethodCreateAttribute(String, String, String)

指定した PrefixLocalName、および NamespaceURI を使用して、XmlAttribute を作成します。

System_CAPS_pubmethodCreateCDataSection(String)

指定されたデータを格納している XmlCDataSection を作成します。

System_CAPS_pubmethodCreateComment(String)

指定されたデータを格納している XmlComment を作成します。

System_CAPS_protmethodCreateDefaultAttribute(String, String, String)

指定したプリフィックス、ローカル名、および名前空間 URI の既定の属性を作成します。

System_CAPS_pubmethodCreateDocumentFragment()

XmlDocumentFragment を作成します。

System_CAPS_pubmethodCreateDocumentType(String, String, String, String)

新しい XmlDocumentType オブジェクトを返します。

System_CAPS_pubmethodCreateElement(String)

指定した名前を使用して要素を作成します。

System_CAPS_pubmethodCreateElement(String, String)

限定名と NamespaceURI を使用して XmlElement を作成します。

System_CAPS_pubmethodCreateElement(String, String, String)

指定した PrefixLocalName、および NamespaceURI を使用して、要素を作成します。

System_CAPS_pubmethodCreateEntityReference(String)

指定した名前を使用して、XmlEntityReference を作成します。

System_CAPS_pubmethodCreateNavigator()

このドキュメント内を移動するための、新しい XPathNavigator オブジェクトを作成します。(XmlNode.CreateNavigator() をオーバーライドします。)

System_CAPS_protmethodCreateNavigator(XmlNode)

指定した XmlNode に配置されているこのドキュメント内を移動するための XPathNavigator オブジェクトを作成します。

System_CAPS_pubmethodCreateNode(String, String, String)

指定したノード型、Name、および NamespaceURI を使用して、XmlNode を作成します。

System_CAPS_pubmethodCreateNode(XmlNodeType, String, String)

指定した XmlNodeTypeName、および NamespaceURI を使用して、XmlNode を作成します。

System_CAPS_pubmethodCreateNode(XmlNodeType, String, String, String)

指定した XmlNodeTypePrefixName、および NamespaceURI を使用して、XmlNode を作成します。

System_CAPS_pubmethodCreateProcessingInstruction(String, String)

指定した名前とデータを使用して XmlProcessingInstruction を作成します。

System_CAPS_pubmethodCreateSignificantWhitespace(String)

XmlSignificantWhitespace ノードを作成します。

System_CAPS_pubmethodCreateTextNode(String)

指定したテキストを使用して、XmlText を作成します。

System_CAPS_pubmethodCreateWhitespace(String)

XmlWhitespace ノードを作成します。

System_CAPS_pubmethodCreateXmlDeclaration(String, String, String)

指定した値を使用して、XmlDeclaration ノードを作成します。

System_CAPS_pubmethodEquals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。(Object から継承されます。)

System_CAPS_protmethodFinalize()

オブジェクトが、ガベージ コレクションによって収集される前に、リソースの解放とその他のクリーンアップ操作の実行を試みることができるようにします。(Object から継承されます。)

System_CAPS_pubmethodGetElementById(String)

指定した ID の XmlElement を取得します。

System_CAPS_pubmethodGetElementsByTagName(String)

指定した Name に一致するすべての子孫の要素のリストを格納している XmlNodeList を返します。

System_CAPS_pubmethodGetElementsByTagName(String, String)

指定した LocalName および NamespaceURI に一致するすべての子孫の要素のリストを格納している XmlNodeList を返します。

System_CAPS_pubmethodGetEnumerator()

現在のノード内の子ノードを反復処理する列挙子を取得します。(XmlNode から継承されます。)

System_CAPS_pubmethodGetHashCode()

既定のハッシュ関数として機能します。(Object から継承されます。)

System_CAPS_pubmethodGetNamespaceOfPrefix(String)

最も近いものを検索 xmlns の現在のノードのスコープにあり、宣言内の名前空間 URI を返しますが、指定したプレフィックスを宣言します。(XmlNode から継承されます。)

System_CAPS_pubmethodGetPrefixOfNamespace(String)

最も近いものを検索 xmlns 宣言に指定した名前空間を URI では、現在のノードのスコープ内にあり、その宣言で定義されたプリフィックスを返します。(XmlNode から継承されます。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_pubmethodImportNode(XmlNode, Boolean)

別のドキュメントから現在のドキュメントにノードをインポートします。

System_CAPS_pubmethodInsertAfter(XmlNode, XmlNode)

指定したノードを指定した参照ノードの直後に挿入します。(XmlNode から継承されます。)

System_CAPS_pubmethodInsertBefore(XmlNode, XmlNode)

指定したノードを指定した参照ノードの直前に挿入します。(XmlNode から継承されます。)

System_CAPS_pubmethodLoad(Stream)

指定したストリームから XML ドキュメントを読み込みます。

System_CAPS_pubmethodLoad(String)

指定した URL から XML ドキュメントを読み込みます。

System_CAPS_pubmethodLoad(TextReader)

指定した TextReader から XML ドキュメントを読み込みます。

System_CAPS_pubmethodLoad(XmlReader)

指定した XmlReader から XML ドキュメントを読み込みます。

System_CAPS_pubmethodLoadXml(String)

指定した文字列から XML ドキュメントを読み込みます。

System_CAPS_protmethodMemberwiseClone()

現在の Object の簡易コピーを作成します。(Object から継承されます。)

System_CAPS_pubmethodNormalize()

この XmlNode の一番下のサブツリーまで含め、すべての XmlText ノードをマークアップ (タグ、コメント、処理命令、CDATA セクション、およびエンティティ参照) だけが XmlText ノードを区分する "通常の" 書式にします。したがって、隣接する XmlText ノードはありません。(XmlNode から継承されます。)

System_CAPS_pubmethodPrependChild(XmlNode)

このノードの子ノードのリストの先頭に、指定したノードを追加します。(XmlNode から継承されます。)

System_CAPS_pubmethodReadNode(XmlReader)

XmlReader 内の情報に基づいて、XmlNode オブジェクトを作成します。 リーダーは、ノードまたは属性に配置されている必要があります。

System_CAPS_pubmethodRemoveAll()

現在のノードのすべての子ノードと属性の両方、またはそのいずれかを削除します。(XmlNode から継承されます。)

System_CAPS_pubmethodRemoveChild(XmlNode)

指定した子ノードを削除します。(XmlNode から継承されます。)

System_CAPS_pubmethodReplaceChild(XmlNode, XmlNode)

子ノードを置き換えます oldChildnewChild ノードです。(XmlNode から継承されます。)

System_CAPS_pubmethodSave(Stream)

指定したストリームに XML ドキュメントを保存します。

System_CAPS_pubmethodSave(String)

指定したファイルに XML ドキュメントを保存します。 指定したファイルが存在する場合は、このメソッドはそれを上書きします。

System_CAPS_pubmethodSave(TextWriter)

指定した TextWriter に XML ドキュメントを保存します。

System_CAPS_pubmethodSave(XmlWriter)

指定した XmlWriter に XML ドキュメントを保存します。

System_CAPS_pubmethodSelectNodes(String)

XPath 式と一致するノードのリストを選択します。(XmlNode から継承されます。)

System_CAPS_pubmethodSelectNodes(String, XmlNamespaceManager)

XPath 式と一致するノードのリストを選択します。 XPath 式で見つかったプリフィックスは、指定されたを使用して解決 XmlNamespaceManagerします。(XmlNode から継承されます。)

System_CAPS_pubmethodSelectSingleNode(String)

最初の選択 XmlNode XPath 式に一致します。(XmlNode から継承されます。)

System_CAPS_pubmethodSelectSingleNode(String, XmlNamespaceManager)

最初の選択 XmlNode XPath 式に一致します。 XPath 式で見つかったプリフィックスは、指定されたを使用して解決 XmlNamespaceManagerします。(XmlNode から継承されます。)

System_CAPS_pubmethodSupports(String, String)

DOM 実装が特定の機能を実装するかどうかをテストします。(XmlNode から継承されます。)

System_CAPS_pubmethodToString()

現在のオブジェクトを表す文字列を返します。(Object から継承されます。)

System_CAPS_pubmethodValidate(ValidationEventHandler)

Schemas プロパティに格納されている XML スキーマ定義言語 (XSD) スキーマと照合して XmlDocument を検証します。

System_CAPS_pubmethodValidate(ValidationEventHandler, XmlNode)

Schemas プロパティの XML スキーマ定義言語 (XSD) スキーマと照合し、指定された XmlNode オブジェクトを検証します。

System_CAPS_pubmethodWriteContentTo(XmlWriter)

指定した XmlWriterXmlDocument ノードのすべての子を保存します。(XmlNode.WriteContentTo(XmlWriter) をオーバーライドします。)

System_CAPS_pubmethodWriteTo(XmlWriter)

指定した XmlWriterXmlDocument ノードを保存します。(XmlNode.WriteTo(XmlWriter) をオーバーライドします。)

名前説明
System_CAPS_pubeventNodeChanged

このドキュメントに属するノードの Value が変更されると発生します。

System_CAPS_pubeventNodeChanging

このドキュメントに属するノードの Value が変更される直前に発生します。

System_CAPS_pubeventNodeInserted

このドキュメントに属するノードが別のノードに挿入されると発生します。

System_CAPS_pubeventNodeInserting

このドキュメントに属するノードが別のノードに挿入される直前に発生します。

System_CAPS_pubeventNodeRemoved

このドキュメントに属するノードが親から削除されると発生します。

System_CAPS_pubeventNodeRemoving

このドキュメントに属するノードがドキュメントから削除される直前に発生します。

名前説明
System_CAPS_pubinterfaceSystem_CAPS_privmethodIEnumerable.GetEnumerator()

このメンバーの詳細については、「XmlNode.GetEnumerator」を参照してください。(XmlNode から継承されます。)

System_CAPS_pubinterfaceSystem_CAPS_privmethodICloneable.Clone()

このメンバーの詳細については、「XmlNode.Clone」を参照してください。(XmlNode から継承されます。)

名前説明
System_CAPS_pubmethodAsParallel()

オーバーロードされます。クエリの並列化を有効にします。(ParallelEnumerable によって定義されています。)

System_CAPS_pubmethodAsQueryable()

オーバーロードされます。変換、 IEnumerable に、 IQueryableです。(Queryable によって定義されています。)

System_CAPS_pubmethodCast<TResult>()

要素をキャスト、 IEnumerable 指定した型にします。(Enumerable によって定義されています。)

System_CAPS_pubmethodOfType<TResult>()

要素をフィルター処理、 IEnumerable 、指定した型に基づいています。(Enumerable によって定義されています。)


XmlDocumentクラスは、XML ドキュメントのメモリ内表現です。 W3C を実装するXML ドキュメント オブジェクト モデル (DOM)Level 1 Core および DOM Level 2 Core です。

DOMの略ドキュメント オブジェクト モデルです。 詳細については、次を参照してください。XML ドキュメント オブジェクト モデル (DOM)です。

使用して、DOM に XML を読み込むことができます、 XmlDocument 、クラスしし、プログラムで読み取り、変更、およびドキュメントに XML を削除します。

動かしたい場合は、開く、XmlDocumentクラスしその実装方法を参照してくださいを参照してください、 Reference Sourceです。

次のような XML ドキュメントを起動します。 コレクション内の少数のブックです。 任意の XML ドキュメントでご覧になる基本的な項目が含まれてが、名前空間、データを表すする要素と属性のデータについて説明します。

<?xml version="1.0" encoding="utf-8"?>
<books xmlns="http://www.contoso.com/books">
  <book genre="novel" ISBN="1-861001-57-8" publicationdate="1823-01-28">
    <title>Pride And Prejudice</title>
    <price>24.95</price>
  </book>
  <book genre="novel" ISBN="1-861002-30-1" publicationdate="1985-01-01">
    <title>The Handmaid's Tale</title>
    <price>29.95</price>
  </book>
  <book genre="novel" ISBN="1-861001-45-3" publicationdate="1811-01-01">
    <title>Sense and Sensibility</title>
    <price>19.95</price>
  </book>
</books>

次に、DOM にこのデータを読み込むメモリで作業することができるようにします。 これを行う最も一般的な方法は、ローカル コンピューター上またはネットワーク上のファイルを参照してください。

この例では、ファイルから XML を読み込みます。 ファイルが存在しない場合のみいくつかの XML を生成し、読み込みます。、

XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
try { doc.Load("booksData.xml"); }
catch (System.IO.FileNotFoundException)
{
    doc.LoadXml("<?xml version=\"1.0\"?> \n" +
    "<books xmlns=\"http://www.contoso.com/books\"> \n" +
    "  <book genre=\"novel\" ISBN=\"1-861001-57-8\" publicationdate=\"1823-01-28\"> \n" +
    "    <title>Pride And Prejudice</title> \n" +
    "    <price>24.95</price> \n" +
    "  </book> \n" +
    "  <book genre=\"novel\" ISBN=\"1-861002-30-1\" publicationdate=\"1985-01-01\"> \n" +
    "    <title>The Handmaid's Tale</title> \n" +
    "    <price>29.95</price> \n" +
    "  </book> \n" +
    "</books>");             
}

完全なサンプル:Manipulate XML in-Memory by using the XmlDocument class and other related types

詳細情報:XML ドキュメントの DOM への読み取り

このような XML スキーマで開始します。 このスキーマで XML データ型を定義して、どの属性が必要です。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  attributeFormDefault="unqualified" 
  elementFormDefault="qualified"
  targetNamespace="http://www.contoso.com/books"> 
  <xs:element name="books">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="book">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="title" type="xs:string" />
              <xs:element name="price" type="xs:decimal" />
            </xs:sequence>
            <xs:attribute name="genre" type="xs:string" use="required" />
            <xs:attribute name="ISBN" type="xs:string" use="required" />
            <xs:attribute name="publicationdate" type="xs:date" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

作成、XmlReaderスキーマを使用してオブジェクトを DOM にそのオブジェクトを読み込む コードがスキーマの規則に違反するための方法で XML ファイルを変更しようとしたときに実行されるイベント ハンドラーを作成します。

これらのコード ブロックは、すべてのヘルパー メソッドを表示します。


//************************************************************************************
//
//  Associate the schema with XML. Then, load the XML and validate it against
//  the schema.
//
//************************************************************************************
public XmlDocument LoadDocumentWithSchemaValidation(bool generateXML, bool generateSchema)
{
    XmlReader reader;

    XmlReaderSettings settings = new XmlReaderSettings();

    // Helper method to retrieve schema.
    XmlSchema schema = getSchema(generateSchema);

    if (schema == null)
    {
        return null;
    }

    settings.Schemas.Add(schema);

    settings.ValidationEventHandler += settings_ValidationEventHandler;
    settings.ValidationFlags =
        settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;
    settings.ValidationType = ValidationType.Schema;

    try
    {
        reader = XmlReader.Create("booksData.xml", settings);
    }
    catch (System.IO.FileNotFoundException)
    {
        if (generateXML)
        {
            string xml = generateXMLString();
            byte[] byteArray = Encoding.UTF8.GetBytes(xml);
            MemoryStream stream = new MemoryStream(byteArray);
            reader = XmlReader.Create(stream, settings);
        }
        else
        {
            return null;
        }

    }

    XmlDocument doc = new XmlDocument();
    doc.PreserveWhitespace = true;
    doc.Load(reader);
    reader.Close();

    return doc;
}

//************************************************************************************
//
//  Helper method that generates an XML Schema.
//
//************************************************************************************
private string generateXMLSchema()
{
    string xmlSchema =
        "<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
        "<xs:schema attributeFormDefault=\"unqualified\" " +
        "elementFormDefault=\"qualified\" targetNamespace=\"http://www.contoso.com/books\" " +
        "xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"> " +
        "<xs:element name=\"books\"> " +
        "<xs:complexType> " +
        "<xs:sequence> " +
        "<xs:element maxOccurs=\"unbounded\" name=\"book\"> " +
        "<xs:complexType> " +
        "<xs:sequence> " +
        "<xs:element name=\"title\" type=\"xs:string\" /> " +
        "<xs:element name=\"price\" type=\"xs:decimal\" /> " +
        "</xs:sequence> " +
        "<xs:attribute name=\"genre\" type=\"xs:string\" use=\"required\" /> " +
        "<xs:attribute name=\"publicationdate\" type=\"xs:date\" use=\"required\" /> " +
        "<xs:attribute name=\"ISBN\" type=\"xs:string\" use=\"required\" /> " +
        "</xs:complexType> " +
        "</xs:element> " +
        "</xs:sequence> " +
        "</xs:complexType> " +
        "</xs:element> " +
        "</xs:schema> ";
    return xmlSchema;
}

//************************************************************************************
//
//  Helper method that gets a schema
//
//************************************************************************************
private XmlSchema getSchema(bool generateSchema)
{
    XmlSchemaSet xs = new XmlSchemaSet();
    XmlSchema schema;
    try
    {
        schema = xs.Add("http://www.contoso.com/books", "booksData.xsd");
    }
    catch (System.IO.FileNotFoundException)
    {
        if (generateSchema)
        {
            string xmlSchemaString = generateXMLSchema();
            byte[] byteArray = Encoding.UTF8.GetBytes(xmlSchemaString);
            MemoryStream stream = new MemoryStream(byteArray);
            XmlReader reader = XmlReader.Create(stream);
            schema = xs.Add("http://www.contoso.com/books", reader);
        }
        else
        {
            return null;
        }

    }
    return schema;
}

//************************************************************************************
//
//  Helper method to validate the XML against the schema.
//
//************************************************************************************
private void validateXML(bool generateSchema, XmlDocument doc)
{
    if (doc.Schemas.Count == 0)
    {
        // Helper method to retrieve schema.
        XmlSchema schema = getSchema(generateSchema);
        doc.Schemas.Add(schema);
    }

    // Use an event handler to validate the XML node against the schema.
    doc.Validate(settings_ValidationEventHandler);

}

//************************************************************************************
//
//  Event handler that is raised when XML doesn't validate against the schema.
//
//************************************************************************************
void settings_ValidationEventHandler(object sender,
    System.Xml.Schema.ValidationEventArgs e)
{
    if (e.Severity == XmlSeverityType.Warning)
    {
        System.Windows.Forms.MessageBox.Show
            ("The following validation warning occurred: " + e.Message);
    }
    else if (e.Severity == XmlSeverityType.Error)
    {
        System.Windows.Forms.MessageBox.Show
            ("The following critical validation errors occurred: " + e.Message);
        Type objectType = sender.GetType();
    }

}

完全なサンプル:Manipulate XML in-Memory by using the XmlDocument class and other related types

詳細情報:DOM における XML ドキュメントの検証

プロパティを使用すると、XML ドキュメント内を移動します。 それらのいずれかを使用する前に簡単に確認しましょういくつかの用語です。 ドキュメントには、ノードで構成されます。 各ノードには 1 つとして直接上のノードです。 親ノードを持たない唯一のノードは、ドキュメント ルート、最上位のノードがあるためです。 ほとんどのノードが持つことができますすぐ下のノードであるノード。 同じレベルにあるノードが兄弟です。

次の例では、ルート ノードを取得、ルート ノードの最初の子ノードに移動、すべての子ノードのアクセス、親ノードに戻るおよび兄弟ノード間で移動しする方法を示します。

ルート ノードで開始します。

この例では、ルート ノードを取得し、そのノードを使用して、コンソールにドキュメントの内容を出力します。

using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {
    //Create the XmlDocument.
    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<?xml version='1.0' ?>" +
                "<book genre='novel' ISBN='1-861001-57-5'>" +
                "<title>Pride And Prejudice</title>" +
                "</book>");

    //Display the document element.
    Console.WriteLine(doc.DocumentElement.OuterXml);
 }
}

子ノードを取得します。

この例では、ルート ノードの最初の子ノードに移動すること、そのノードの子ノードを反復処理し、存在する場合。

using System;
using System.IO;
using System.Xml;

public class Sample {

  public static void Main() {

    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<book ISBN='1-861001-57-5'>" +
                "<title>Pride And Prejudice</title>" +
                "<price>19.95</price>" +
                "</book>");

    XmlNode root = doc.FirstChild;

    //Display the contents of the child nodes.
    if (root.HasChildNodes)
    {
      for (int i=0; i<root.ChildNodes.Count; i++)
      {
        Console.WriteLine(root.ChildNodes[i].InnerText);
      }
    }
  }
}

親ノードに戻る

ParentNode プロパティを使用します。

最後の子ノードを参照してください。

この例では、書籍の価格を (ある book ノードの最後の子ノード)、コンソールに書き込みます。

using System;
using System.IO;
using System.Xml;

public class Sample {

  public static void Main() {

    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<book ISBN='1-861001-57-5'>" +
                "<title>Pride And Prejudice</title>" +
                "<price>19.95</price>" +
                "</book>");

    XmlNode root = doc.FirstChild;

    Console.WriteLine("Display the price element...");
    Console.WriteLine(root.LastChild.OuterXml);
  }
}

兄弟間でのページに進む

この例は、ブックから書籍を前方移動します。 Book ノードは、他の兄弟です。

using System;
using System.Xml;

public class Sample {

  public static void Main() {

      XmlDocument doc = new XmlDocument();
      doc.Load("books.xml");

      XmlNode currNode = doc.DocumentElement.FirstChild;
      Console.WriteLine("First book...");
      Console.WriteLine(currNode.OuterXml);

      XmlNode nextNode = currNode.NextSibling;
      Console.WriteLine("\r\nSecond book...");
      Console.WriteLine(nextNode.OuterXml); 

  }
}

兄弟間で後方に移動します。

この例は、帳から書籍を後方に移動します。

using System;
using System.Xml;

public class Sample {

  public static void Main() {

      XmlDocument doc = new XmlDocument();
      doc.Load("books.xml");

      XmlNode lastNode = doc.DocumentElement.LastChild;
      Console.WriteLine("Last book...");
      Console.WriteLine(lastNode.OuterXml);

      XmlNode prevNode = lastNode.PreviousSibling;
      Console.WriteLine("\r\nPrevious book...");
      Console.WriteLine(prevNode.OuterXml);  
  }
}

データの 1 つまたは複数のノードを検索する最も一般的な方法は、XPath クエリ文字列を使用するが、いずれかを必要としないメソッドもあります。

1 つのノードを取得します。

この例では、ISBN 番号を使用してブックを検索します。

public XmlNode GetBook(string uniqueAttribute, XmlDocument doc)
{
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
    nsmgr.AddNamespace("bk", "http://www.contoso.com/books");
    string xPathString = "//bk:books/bk:book[@ISBN='" + uniqueAttribute + "']";
    XmlNode xmlNode = doc.DocumentElement.SelectSingleNode(xPathString, nsmgr);
   return xmlNode;
}

この例で使用される文字列は、Xpath クエリです。 例については、ここでは見つけることができます: XPath examplesです。

使用することも、GetElementByIdノードを取得します。 このアプローチを使用するのには、定義する必要があります、ドキュメント型定義の宣言で、XML ファイルの ID。

ノードを取得した後は、属性または子ノードの値を取得します。 この例でを book ノードはします。

public void GetBookInformation(ref string title, ref string ISBN, ref string publicationDate,
    ref string price, ref string genre, XmlNode book)
{
    XmlElement bookElement = (XmlElement)book;

    // Get the attributes of a book.        
    XmlAttribute attr = bookElement.GetAttributeNode("ISBN");
    ISBN = attr.InnerXml;

    attr = bookElement.GetAttributeNode("genre");
    genre = attr.InnerXml;

    attr = bookElement.GetAttributeNode("publicationdate");
    publicationDate = attr.InnerXml;

    // Get the values of child elements of a book.
    title = bookElement["title"].InnerText;
    price = bookElement["price"].InnerText;
}

ノードのコレクションを取得します。

この例は、ここで、著者の姓、名はすべてのブックを選択オースティン、し、これらの書籍の価格を変更します。

using System;
using System.IO;
using System.Xml;

public class Sample {

  public static void Main() {

    XmlDocument doc = new XmlDocument();
    doc.Load("booksort.xml");

    XmlNodeList nodeList;
    XmlNode root = doc.DocumentElement;

    nodeList=root.SelectNodes("descendant::book[author/last-name='Austen']");

    //Change the price on the books.
    foreach (XmlNode book in nodeList)
    {
      book.LastChild.InnerText="15.95";
    }

    Console.WriteLine("Display the modified XML document....");
    doc.Save(Console.Out);

  }
}

ノードの名前を使用して、ノードのコレクションを取得することもできます。 たとえば、この例では、すべての書籍タイトルのコレクションを取得します。

using System;
using System.IO;
using System.Xml;

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

    //Display all the book titles.
    XmlNodeList elemList = doc.GetElementsByTagName("title");
    for (int i=0; i < elemList.Count; i++)
    {   
      Console.WriteLine(elemList[i].InnerXml);
    }  

  }
}

完全なサンプル:Manipulate XML in-Memory by using the XmlDocument class and other related types

詳細情報:XPath ナビゲーションによるノードの選択

この例では、book ノードとその属性を編集します。

public void editBook(string title, string ISBN, string publicationDate,
    string genre, string price, XmlNode book, bool validateNode, bool generateSchema)
{

    XmlElement bookElement = (XmlElement)book;

    // Get the attributes of a book.        
    bookElement.SetAttribute("ISBN", ISBN);
    bookElement.SetAttribute("genre", genre);
    bookElement.SetAttribute("publicationdate", publicationDate);

    // Get the values of child elements of a book.
    bookElement["title"].InnerText = title;
    bookElement["price"].InnerText = price;

    if (validateNode)
    {
        validateXML(generateSchema, bookElement.OwnerDocument);
    }
}

詳細情報:XML ドキュメントのノード、コンテンツ、値の変更

完全なサンプル:Manipulate XML in-Memory by using the XmlDocument class and other related types

ノードを追加するには、使用、CreateElementメソッドまたはCreateNodeメソッドです。

ブックなどのデータ ノードを追加するには、使用、CreateElementメソッドです。

他の種類のノード、コメント、空白ノード、または CDATA のノードの使用などのCreateNodeメソッドです。

この例では、book ノードを作成し、そのノードに attrubutes を追加し、文書にそのノードを追加します。

public XmlElement AddNewBook(string genre, string ISBN, string misc, 
    string title, string price, XmlDocument doc)
{
    // Create a new book element.
    XmlElement bookElement = doc.CreateElement("book", "http://www.contoso.com/books");

    // Create attributes for book and append them to the book element.
    XmlAttribute attribute = doc.CreateAttribute("genre");
    attribute.Value = genre;
    bookElement.Attributes.Append(attribute);

    attribute = doc.CreateAttribute("ISBN");
    attribute.Value = ISBN;
    bookElement.Attributes.Append(attribute);

    attribute = doc.CreateAttribute("publicationdate");
    attribute.Value = misc;
    bookElement.Attributes.Append(attribute);

    // Create and append a child element for the title of the book.
    XmlElement titleElement = doc.CreateElement("title");
    titleElement.InnerText = title;
    bookElement.AppendChild(titleElement);

    // Introduce a newline character so that XML is nicely formatted.
    bookElement.InnerXml = 
        bookElement.InnerXml.Replace(titleElement.OuterXml, 
        "\n    " + titleElement.OuterXml + " \n    ");

    // Create and append a child element for the price of the book.
    XmlElement priceElement = doc.CreateElement("price");
    priceElement.InnerText= price;
    bookElement.AppendChild(priceElement);

    // Introduce a newline character so that XML is nicely formatted.
    bookElement.InnerXml =
        bookElement.InnerXml.Replace(priceElement.OuterXml, priceElement.OuterXml + "   \n  ");

    return bookElement;

}

完全なサンプル:Manipulate XML in-Memory by using the XmlDocument class and other related types

詳細情報:XML ドキュメントへのノードの挿入

ノードを削除するを使用して、RemoveChildメソッドです。

この例では、ドキュメントと book ノードの直前に表示される任意の空白文字からブックを削除します。

public void deleteBook(XmlNode book)
{
    XmlNode prevNode = book.PreviousSibling;

    book.OwnerDocument.DocumentElement.RemoveChild(book);


    if (prevNode.NodeType == XmlNodeType.Whitespace || 
        prevNode.NodeType == XmlNodeType.SignificantWhitespace)
    {
        prevNode.OwnerDocument.DocumentElement.RemoveChild(prevNode);
    }
}

完全なサンプル:Manipulate XML in-Memory by using the XmlDocument class and other related types

詳細情報:XML ドキュメントからのノード、コンテンツ、値の削除

使用して、ドキュメントに表示されるノードする場所を選択できます、InsertBeforeInsertAfterメソッドです。

この例では、次の 2 つのヘルパー メソッドを使用します。 高いノードは、一覧のうちの 1 つ移動します。 もう 1 つ下のノードに移動します。

これらのメソッドは、書籍の一覧で、ブックを上下に移動できるようにするアプリケーションで使用可能性があります。 ユーザーがブックを選択し、up を押して、または下向きボタン、コードは前に、または後の他の book ノードに対応する book ノードを配置するようメソッドを呼び出す可能性があります。

//************************************************************************************
//
//  Summary: Move elements up in the XML.
//  
//
//************************************************************************************

public void MoveElementUp(XmlNode book)
{
    XmlNode previousNode = book.PreviousSibling;
    while (previousNode != null && (previousNode.NodeType != XmlNodeType.Element))
    {
        previousNode = previousNode.PreviousSibling;
    }
    if (previousNode != null)
    {
        XmlNode newLineNode = book.NextSibling;
        book.OwnerDocument.DocumentElement.RemoveChild(book);
        if (newLineNode.NodeType == XmlNodeType.Whitespace | 
            newLineNode.NodeType == XmlNodeType.SignificantWhitespace)
        {
            newLineNode.OwnerDocument.DocumentElement.RemoveChild(newLineNode);
        }
        InsertBookElement((XmlElement)book, Constants.positionAbove, 
            previousNode, false, false);
    }
}


//************************************************************************************
//
//  Summary: Move elements down in the XML.
//  
//
//************************************************************************************
public void MoveElementDown(XmlNode book)
{
    // Walk backwards until we find an element - ignore text nodes
    XmlNode NextNode = book.NextSibling;
    while (NextNode != null && (NextNode.NodeType != XmlNodeType.Element))
    {
        NextNode = NextNode.NextSibling;
    }
    if (NextNode != null)
    {
        XmlNode newLineNode = book.PreviousSibling;
        book.OwnerDocument.DocumentElement.RemoveChild(book);
        if (newLineNode.NodeType == XmlNodeType.Whitespace |
            newLineNode.NodeType == XmlNodeType.SignificantWhitespace)
        {
            newLineNode.OwnerDocument.DocumentElement.RemoveChild(newLineNode);
        }

        InsertBookElement((XmlElement)book, Constants.positionBelow, 
            NextNode, false, false);
    }

}

完全なサンプル:Manipulate XML in-Memory by using the XmlDocument class and other related types

ユニバーサル Windows プラットフォーム
10 以降で使用可能
.NET Framework
1.1 以降で使用可能

この型のパブリック static (Visual Basic では Shared ) メンバーはスレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

トップに戻る
表示: