System.Xml 名前空間

XML 処理の標準ベースのサポートを提供します。 Provides standards-based support for processing XML.

クラス

NameTable

シングルスレッド XmlNameTable を実装します。Implements a single-threaded XmlNameTable.

UniqueId

GUID に最適化された一意の識別子。A unique identifier optimized for Guids.

XmlAttribute

1 つの属性を表します。Represents an attribute. 属性の有効値と既定値は、ドキュメント型定義 (DTD) またはスキーマの中で定義されます。Valid and default values for the attribute are defined in a document type definition (DTD) or schema.

XmlAttributeCollection

名前またはインデックスによってアクセス可能な属性のコレクションを表します。Represents a collection of attributes that can be accessed by name or index.

XmlBinaryReaderSession

最適化された文字列を動的な方法で管理できるようにします。Enables optimized strings to be managed in a dynamic way.

XmlBinaryWriterSession

動的ディクショナリを使用してメッセージ内に出現する共通の文字列を圧縮し、状態を維持できるようにします。Enables using a dynamic dictionary to compress common strings that appear in a message and maintain state.

XmlCDataSection

CDATA セクションを表します。Represents a CDATA section.

XmlCharacterData

いくつかのクラスによって使用されるさまざまなテキスト操作メソッドを提供します。Provides text manipulation methods that are used by several classes.

XmlComment

XML コメントの内容を表します。Represents the content of an XML comment.

XmlConvert

XML 名をエンコードおよびデコードし、共通言語ランタイム型と XML スキーマ定義言語 (XSD) 型との間で変換を実行するメソッドを提供します。Encodes and decodes XML names, and provides methods for converting between common language runtime types and XML Schema definition language (XSD) types. データ型を変換する場合、返される値はロケールには依存しません。When converting data types, the values returned are locale-independent.

XmlDataDocument

リレーショナル DataSet を通じて、構造化データを格納、取得、および操作できるようにします。Allows structured data to be stored, retrieved, and manipulated through a relational DataSet.

XmlDeclaration

XML 宣言ノード <?xml version='1.0'...?> を表します。Represents the XML declaration node <?xml version='1.0'...?>.

XmlDictionary

Windows Communication Foundation (WCF) の XML リーダー/ライターの実装の最適化に使用されるディクショナリを実装します。Implements a dictionary used to optimize Windows Communication Foundation (WCF)'s XML reader/writer implementations.

XmlDictionaryReader

シリアル化および逆シリアル化を実行するために Windows Communication Foundation (WCF) が abstract から派生する XmlReader クラス。An abstract class that the Windows Communication Foundation (WCF) derives from XmlReader to do serialization and deserialization.

XmlDictionaryReaderQuotas

XmlDictionaryReaders の構成可能なクォータ値を格納します。Contains configurable quota values for XmlDictionaryReaders.

XmlDictionaryString

XmlDictionary に格納されているエントリを表します。Represents an entry stored in a XmlDictionary.

XmlDictionaryWriter

シリアル化および逆シリアル化を実行するために Windows Communication Foundation (WCF) が XmlWriter から派生する抽象クラスを表します。Represents an abstract class that Windows Communication Foundation (WCF) derives from XmlWriter to do serialization and deserialization.

XmlDocument

XML ドキュメントを表します。Represents an XML document. このクラスを使用すると、XML のドキュメントへの読み込み、検証、編集、追加、および配置が可能です。You can use this class to load, validate, edit, add, and position XML in a document.

XmlDocumentFragment

ツリー挿入操作に使用できる、簡易オブジェクトを表します。Represents a lightweight object that is useful for tree insert operations.

XmlDocumentType

ドキュメント型宣言を表します。Represents the document type declaration.

XmlDocumentXPathExtensions

XmlDocumentおよびドキュメントナビゲーション用の拡張メソッドを提供し XmlNode ます。Provides extension methods for the XmlDocument and XmlNode for document navigation.

XmlElement

1 つの要素を表します。Represents an element.

XmlEntity

エンティティの宣言を表します (<!ENTITY... > など)。Represents an entity declaration, such as <!ENTITY... >.

XmlEntityReference

エンティティ参照ノードを表します。Represents an entity reference node.

XmlException

最後の例外に関する詳細情報を返します。Returns detailed information about the last exception.

XmlImplementation

XmlDocument オブジェクトのセットのコンテキストを定義します。Defines the context for a set of XmlDocument objects.

XmlLinkedNode

このノードの直前または直後のノードを取得します。Gets the node immediately preceding or following this node.

XmlNamedNodeMap

名前またはインデックスによってアクセス可能なノードのコレクションを表します。Represents a collection of nodes that can be accessed by name or index.

XmlNamespaceManager

名前空間の解決、コレクションへの追加と削除を実行します。また、名前空間のスコープ管理機能を提供します。Resolves, adds, and removes namespaces to a collection and provides scope management for these namespaces.

XmlNameTable

最小単位に分割された文字列オブジェクトのテーブル。Table of atomized string objects.

XmlNode

XML ドキュメント内の単一のノードを表します。Represents a single node in the XML document.

XmlNodeChangedEventArgs

NodeChangedNodeChangingNodeInsertedNodeInsertingNodeRemovedNodeRemoving の各イベントのデータを提供します。Provides data for the NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved and NodeRemoving events.

XmlNodeList

ノードの順序付きコレクションを表します。Represents an ordered collection of nodes.

XmlNodeReader

XmlNode 内の XML データに対する、高速で非キャッシュの前方向アクセスを提供するリーダーを表します。Represents a reader that provides fast, non-cached forward only access to XML data in an XmlNode.

XmlNotation

表記宣言を表します (<!NOTATION... > など)。Represents a notation declaration, such as <!NOTATION... >.

XmlParserContext

XML フラグメントを解析するために XmlReader が必要とするコンテキスト情報をすべて提供します。Provides all the context information required by the XmlReader to parse an XML fragment.

XmlProcessingInstruction

XML がプロセッサ固有の情報をドキュメントのテキストに保持するために定義する処理命令を表します。Represents a processing instruction, which XML defines to keep processor-specific information in the text of the document.

XmlQualifiedName

XML 修飾名を表します。Represents an XML qualified name.

XmlReader

XML データへの高速で非キャッシュの前方向アクセスを提供するリーダーを表します。Represents a reader that provides fast, noncached, forward-only access to XML data.

XmlReaderSettings

XmlReader メソッドで作成された Create オブジェクトでサポートする一連の機能を指定します。Specifies a set of features to support on the XmlReader object created by the Create method.

XmlResolver

URI (Uniform Resource Identifier) で名前が指定された外部 XML リソースを解決します。Resolves external XML resources named by a Uniform Resource Identifier (URI).

XmlSecureResolver

XmlResolver オブジェクトをラップし、基になっている XmlResolver がアクセスできるリソースを制限することによって、XmlResolver の別の実装のセキュリティ保護を支援します。Helps to secure another implementation of XmlResolver by wrapping the XmlResolver object and restricting the resources that the underlying XmlResolver has access to.

XmlSignificantWhitespace

混合コンテンツ ノードのマークアップ間にある空白、または xml:space= 'preserve' スコープ内の空白を表します。Represents white space between markup in a mixed content node or white space within an xml:space= 'preserve' scope. これは有意の空白とも呼ばれます。This is also referred to as significant white space.

XmlText

要素または属性のテキストの内容を表します。Represents the text content of an element or attribute.

XmlTextReader

XML データへの高速で非キャッシュの前方向アクセスを提供するリーダーを表します。Represents a reader that provides fast, non-cached, forward-only access to XML data.

.NET Framework 2.0 以降では、代わりに XmlReader クラスを使用することをお勧めします。Starting with the .NET Framework 2.0, we recommend that you use the XmlReader class instead.

XmlTextWriter

W3C 勧告『Extensible Markup Language (XML) 1.0』および勧告『Namespaces in XML』に準拠する XML データを格納するストリームまたはファイルを高速に、非キャッシュで、前方向に生成する方法を提供するライターを表します。Represents a writer that provides a fast, non-cached, forward-only way of generating streams or files containing XML data that conforms to the W3C Extensible Markup Language (XML) 1.0 and the Namespaces in XML recommendations.

.NET Framework 2.0 以降では、代わりに XmlWriter クラスを使用することをお勧めします。Starting with the .NET Framework 2.0, we recommend that you use the XmlWriter class instead.

XmlUrlResolver

URI (Uniform Resource Identifier) で名前が指定された外部 XML リソースを解決します。Resolves external XML resources named by a Uniform Resource Identifier (URI).

XmlValidatingReader

ドキュメント型定義 (DTD: Document Type Definition)、XML-Data Reduced (XDR) スキーマ、および XML スキーマ定義言語 (XSD) 検証を提供するリーダーを表します。Represents a reader that provides document type definition (DTD), XML-Data Reduced (XDR) schema, and XML Schema definition language (XSD) validation.

このクラスは今後は使用しません。This class is obsolete. .NET Framework 2.0 以降は、検証 XML リーダーを作成するのに XmlReaderSettings クラスおよび Create メソッドを使用することをお勧めします。Starting with the .NET Framework 2.0, we recommend that you use the XmlReaderSettings class and the Create method to create a validating XML reader.

XmlWhitespace

要素の内容の中にある空白を表します。Represents white space in element content.

XmlWriter

XML データが格納されたストリームまたはファイルを、高速かつ非キャッシュで前方のみに生成する方法を提供するライターを表します。Represents a writer that provides a fast, non-cached, forward-only way to generate streams or files that contain XML data.

XmlWriterSettings

XmlWriter メソッドで作成された Create オブジェクトでサポートする一連の機能を指定します。Specifies a set of features to support on the XmlWriter object created by the Create method.

XmlXapResolver

XmlXapResolver 型は、Silverlight アプリケーションの XAP パッケージのリソースを解決するために使用されます。The XmlXapResolver type is used to resolve resources in the Silverlight application's XAP package.

インターフェイス

IApplicationResourceStreamResolver

アプリケーションのリソース ストリーム リゾルバーを表します。Represents an application resource stream resolver.

IFragmentCapableXmlDictionaryWriter

XmlDictionaryWriter で実装されると XML フラグメントの処理を可能にする、プロパティとメソッドを含みます。Contains properties and methods that when implemented by a XmlDictionaryWriter, allows processing of XML fragments.

IHasXmlNode

クラスが、現在のコンテキストまたは位置から XmlNode を返せるようにします。Enables a class to return an XmlNode from the current context or position.

IStreamProvider

ストリームを提供するクラスによって実装できるインターフェイスを表します。Represents an interface that can be implemented by classes providing streams.

IXmlBinaryReaderInitializer

新しいドキュメントを読むためにバイナリ リーダーを再初期化するメソッドを提供します。Provides methods for reinitializing a binary reader to read a new document.

IXmlBinaryWriterInitializer

このインターフェイスから派生する XML バイナリ ライターの実装要件を指定します。Specifies implementation requirements for XML binary writers that derive from this interface.

IXmlDictionary

interface および XmlDictionaryReader の実装が使用するために、XML ディクショナリが実装する必要のあるコントラクトを定義する XmlDictionaryWriterAn interface that defines the contract that an Xml dictionary must implement to be used by XmlDictionaryReader and XmlDictionaryWriter implementations.

IXmlLineInfo

クラスが行情報および位置情報を返せるようにするインターフェイスを提供します。Provides an interface to enable a class to return line and position information.

IXmlMtomReaderInitializer

このインターフェイスから派生する XML MTOM リーダーの実装要件を指定します。Specifies implementation requirements for XML MTOM readers that derive from this interface.

IXmlMtomWriterInitializer

MTOM ライターで実装されると、このインターフェイスは MTOM ライターの初期化を保証します。When implemented by an MTOM writer, this interface ensures initialization for an MTOM writer.

IXmlNamespaceResolver

プレフィックスと名前空間の一連の割り当てに対する読み取り専用アクセスを提供します。Provides read-only access to a set of prefix and namespace mappings.

IXmlTextReaderInitializer

このインターフェイスから派生する XML テキスト リーダーの実装要件を指定します。Specifies implementation requirements for XML text readers that derive from this interface.

IXmlTextWriterInitializer

このインターフェイスから派生する XML テキスト ライターの実装要件を指定します。Specifies implementation requirements for XML text writers that derive from this interface.

列挙型

ConformanceLevel

XmlReader オブジェクトおよび XmlWriter オブジェクトで実行する、入力チェックまたは出力チェックの量を指定します。Specifies the amount of input or output checking that XmlReader and XmlWriter objects perform.

DtdProcessing

DTD を処理するためのオプションを指定します。Specifies the options for processing DTDs. DtdProcessing 列挙体は XmlReaderSettings クラスによって使用されます。The DtdProcessing enumeration is used by the XmlReaderSettings class.

EntityHandling

XmlTextReader または XmlValidatingReader でエンティティがどのように処理されるかを指定します。Specifies how the XmlTextReader or XmlValidatingReader handle entities.

Formatting

XmlTextWriter の書式オプションを指定します。Specifies formatting options for the XmlTextWriter.

NamespaceHandling

XmlWriter で重複する名前空間宣言を削除するかどうかを指定します。Specifies whether to remove duplicate namespace declarations in the XmlWriter.

NewLineHandling

改行の処理方法を指定します。Specifies how to handle line breaks.

ReadState

リーダーの状態を指定します。Specifies the state of the reader.

ValidationType

実行する検証のタイプを指定します。Specifies the type of validation to perform.

WhitespaceHandling

空白の処理方法を指定します。Specifies how white space is handled.

WriteState

XmlWriter の状態を指定します。Specifies the state of the XmlWriter.

XmlDateTimeSerializationMode

文字列と DateTime の間で変換を行うときに、時刻の値をどのように処理するかを指定します。Specifies how to treat the time value when converting between string and DateTime.

XmlDictionaryReaderQuotaTypes

XmlDictionaryReaders の構成可能なクォータ値を列挙します。Enumerates the configurable quota values for XmlDictionaryReaders.

XmlNamespaceScope

名前空間のスコープを定義します。Defines the namespace scope.

XmlNodeChangedAction

ノード変更の型を指定します。Specifies the type of node change.

XmlNodeOrder

ノードのドキュメント順を 2 番目のノードと比較して記述します。Describes the document order of a node compared to a second node.

XmlNodeType

ノードの型を指定します。Specifies the type of node.

XmlOutputMethod

XmlWriter 出力をシリアル化するために使用するメソッドを指定します。Specifies the method used to serialize the XmlWriter output.

XmlSpace

現在の xml:space スコープを指定します。Specifies the current xml:space scope.

XmlTokenizedType

文字列の XML 型を表します。Represents the XML type for the string. これにより、文字列を CDATA セクション型などの特定の XML 型として読み取ることができます。This allows the string to be read as a particular XML type, for example a CDATA section type.

代理人

OnXmlDictionaryReaderClose

リーダーを閉じるときのコールバック メソッドに対する delegatedelegate for a callback method when closing the reader.

XmlNodeChangedEventHandler

NodeChangedNodeChangingNodeInsertedNodeInsertingNodeRemovedNodeRemoving の各イベントを処理するメソッドを表します。Represents the method that handles NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved and NodeRemoving events.

注釈

サポートされている標準Supported standards

System.Xml名前空間は、次の標準をサポートしています。The System.Xml namespace supports these standards:

W3C 勧告とは異なる XML クラスの2つのケースについては、「 w3c 仕様との違い 」セクションを参照してください。See the section Differences from the W3C specs for two cases in which the XML classes differ from the W3C recommendations.

.NET Framework には、XML 関連の操作のための他の名前空間も用意されています。The .NET Framework also provides other namespaces for XML-related operations. リスト、説明、リンクについては、 System.Xml 名前空間 に関する web ページを参照してください。For a list, descriptions, and links, see the System.Xml Namespaces webpage.

XML の非同期処理Processing XML asynchronously

System.Xml.XmlReaderクラスとクラスには、 System.Xml.XmlWriter 非同期プログラミングモデルに基づく多数の非同期メソッドが含まれています。The System.Xml.XmlReader and System.Xml.XmlWriter classes include a number of asynchronous methods that are based on the asynchronous programming model. これらのメソッドは、名前の末尾に "Async" という文字列を指定することによって識別できます。These methods can be identified by the string "Async" at the end of their names. これらのメソッドを使用すると、同期コードに似た非同期コードを記述できます。また、既存の同期コードを非同期コードに簡単に移行できます。With these methods, you can write asynchronous code that's similar to your synchronous code, and you can migrate your existing synchronous code to asynchronous code easily.

  • 大量のネットワークストリームの待機時間があるアプリでは、非同期メソッドを使用します。Use the asynchronous methods in apps where there is significant network stream latency. メモリストリームまたはローカルファイルストリームの読み取り/書き込み操作には、非同期 Api を使用しないようにしてください。Avoid using the asynchronous APIs for memory stream or local file stream read/write operations. 入力ストリーム、 XmlTextReader 、およびは、 XmlTextWriter 非同期操作もサポートしている必要があります。The input stream, XmlTextReader, and XmlTextWriter should support asynchronous operations as well. それ以外の場合、スレッドは i/o 操作によってブロックされます。Otherwise, threads will still be blocked by I/O operations.

  • キーワードを使用し await たり、非同期 API を使用したりする必要がある場合は、同期および非同期の関数呼び出しを混在させることはお勧めしません。We don't recommend mixing synchronous and asynchronous function calls, because you might forget to use the await keyword or use a synchronous API where an asynchronous one is necessary.

  • XmlReaderSettings.Async非同期メソッドを使用しない場合は、または XmlWriterSettings.Async フラグをに設定しないでください trueDo not set the XmlReaderSettings.Async or XmlWriterSettings.Async flag to true if you don't intend to use an asynchronous method.

  • 非同期メソッドを呼び出すときにキーワードを指定し忘れた場合、 await 結果は非決定的になります。予期した結果または例外が発生する可能性があります。If you forget to specify the await keyword when you call an asynchronous method, the results are non-deterministic: You might receive the result you expected or an exception.

  • XmlReaderオブジェクトが大きなテキストノードを読み取っている場合、テキスト値の一部のみがキャッシュされ、テキストノードが返される可能性があるため、プロパティの取得 XmlReader.Value は i/o 操作によってブロックされる可能性があります。When an XmlReader object is reading a large text node, it might cache only a partial text value and return the text node, so retrieving the XmlReader.Value property might be blocked by an I/O operation. メソッドを使用して XmlReader.GetValueAsync 非同期モードでテキスト値を取得するか、メソッドを使用して XmlReader.ReadValueChunkAsync 大量のテキストブロックをチャンク単位で読み取ります。Use the XmlReader.GetValueAsync method to get the text value in asynchronous mode, or use the XmlReader.ReadValueChunkAsync method to read a large text block in chunks.

  • オブジェクトを使用する場合は XmlWriter 、を呼び出す前にメソッドを呼び出して、 XmlWriter.FlushAsync XmlWriter.Close i/o 操作がブロックされないようにします。When you use an XmlWriter object, call the XmlWriter.FlushAsync method before calling XmlWriter.Close to avoid blocking an I/O operation.

W3C 仕様との違いDifferences from the W3C specs

モデルグループスキーマコンポーネントに制約が含まれる2つのケースでは、 System.Xml 名前空間が W3C 勧告と異なります。In two cases that involve constraints on model group schema components, the System.Xml namespace differs from the W3C recommendations.

要素宣言の一貫性:Consistency in element declarations:

場合によっては、代替グループを使用すると、 System.Xml 実装は "スキーマコンポーネントの制約: 要素宣言の整合性" を満たしていません。これについては、W3C 仕様の「 モデルグループスキーマコンポーネントの制約 」で説明されています。In some cases, when substitution groups are used, the System.Xml implementation does not satisfy the "Schema Component Constraint: Element Declarations Consistent," which is described in the Constraints on Model Group Schema Components section of the W3C spec.

たとえば、次のスキーマには、同じ名前で同じコンテンツモデル内の異なる型を持つ要素が含まれており、代替グループが使用されています。For example, the following schema includes elements that have the same name but different types in the same content model, and substitution groups are used. これは通常、エラーになりますが、System.Xml では、このスキーマがエラーなしでコンパイルおよび検証されます。This should cause an error, but System.Xml compiles and validates the schema without errors.

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

   <xs:element name="e1" type="t1"/>
   <xs:complexType name="t1"/>

   <xs:element name="e2" type="t2" substitutionGroup="e1"/>
      <xs:complexType name="t2">
         <xs:complexContent>
            <xs:extension base="t1">
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>

   <xs:complexType name="t3">
      <xs:sequence>
         <xs:element ref="e1"/>
         <xs:element name="e2" type="xs:int"/>
      </xs:sequence>
   </xs:complexType>
</xs:schema>

このスキーマでは、型 t3 に要素のシーケンスが含まれます。In this schema, type t3 contains a sequence of elements. 置換が実行されるため、シーケンスの要素 e1 の参照は、e1 型の要素 t1 または e2 型の要素 t2 になる場合があります。Because of the substitution, the reference to element e1 from the sequence can result either in element e1 of type t1 or in element e2 of type t2. 後者の場合、2つの要素のシーケンスが生成 e2 されます。一方の要素の型はで、もう1つは t2xs:int です。The latter case would result in a sequence of two e2 elements, where one is of type t2 and the other is of type xs:int.

一意のパーティクル属性:Unique particle attribution:

次の条件下では、 System.Xml 実装は "スキーマコンポーネント制約: 一意のパーティクル属性" を満たしていません。これについては、W3C 仕様の「 モデルグループスキーマコンポーネントの制約 」で説明されています。Under the following conditions, the System.Xml implementation does not satisfy the "Schema Component Constraint: Unique Particle Attribution," which is described in the Constraints on Model Group Schema Components section of the W3C spec.

  • グループ内の要素の 1 つが、別の要素を参照している。One of the elements in the group references another element.

  • 参照されている要素が代替グループの head 要素である。The referenced element is a head element of a substitution group.

  • 代替グループには、グループ内の要素の1つと同じ名前を持つ要素が含まれています。The substitution group contains an element that has the same name as one of the elements in the group.

  • 代替グループの head 要素を参照する要素のカーディナリティと、代替グループ要素と同じ名前の要素は固定されていません (minOccurs < maxOccurs)。The cardinality of the element that references the substitution group head element and the element with the same name as a substitution group element is not fixed (minOccurs < maxOccurs).

  • 置換グループを参照する要素の定義は、代替グループ要素と同じ名前の要素の定義の前にあります。The definition of the element that references the substitution group precedes the definition of the element with the same name as a substitution group element.

たとえば、次のスキーマでは、コンテンツ モデルがあいまいであるためにコンパイル エラーが発生するはずですが、System.Xml では、このスキーマがエラーなしでコンパイルされます。For example, in the schema below the content model is ambiguous and should cause a compilation error, but System.Xml compiles the schema without errors.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

  <xs:element name="e1" type="xs:int"/>
  <xs:element name="e2" type="xs:int" substitutionGroup="e1"/>

  <xs:complexType name="t3">
    <xs:sequence>
      <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
      <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="e3" type="t3"/>
</xs:schema>

上記のスキーマに対して次の XML を検証しようとすると、検証は失敗し、"要素 ' e3 ' に無効な子要素 ' e2 ' が含まれています。" というメッセージが表示され、 XmlSchemaValidationException 例外がスローされます。If you try to validate the following XML against the schema above, the validation will fail with the following message: "The element 'e3' has invalid child element 'e2'." and an XmlSchemaValidationException exception will be thrown.

<e3>
  <e2>1</e2>
  <e2>2</e2>
</e3>

この問題を回避するには、XSD ドキュメントで要素宣言を交換します。To work around this problem, you can swap element declarations in the XSD document. 次に例を示します。For example:

<xs:sequence>
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

これを次のようにします。becomes this:

<xs:sequence>
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

同じ問題のもう1つの例を次に示します。Here's another example of the same issue:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
   <xs:element name="e1" type="xs:string"/>
   <xs:element name="e2" type="xs:string" substitutionGroup="e1"/>

   <xs:complexType name="t3">
      <xs:sequence>
         <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
         <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
   </xs:complexType>
   <xs:element name="e3" type="t3"/>
</xs:schema>

上記のスキーマに対して次の XML を検証しようとすると、検証は失敗します。 "ハンドルされない例外: System.Xml.Schema.XmlSchemaValidationException: ' e2 ' el 要素が無効です-値 ' abc ' はデータ型に対して無効です 'http://www.w3.org/2001/XMLSchema:int' -文字列 ' abc ' は有効な Int32 値ではありません。"If you try to validate the following XML against the schema above, the validation will fail with the following exception: "Unhandled Exception: System.Xml.Schema.XmlSchemaValidationException: The 'e2' el element is invalid - The value 'abc' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:int' - The string 'abc' is not a valid Int32 value."

<e3><e2>abc</e2></e3>

セキュリティの考慮事項Security considerations

名前空間の型とメンバーは、 System.Xml .net の セキュリティシステムに依存します。The types and members in the System.Xml namespace rely on the .NET security system. 以下のセクションでは、XML テクノロジに固有のセキュリティの問題について説明します。The following sections discuss security issues that are specific to XML technologies.

また、型とメンバーを使用する場合 System.Xml 、プライバシーに影響する可能性のあるデータが XML に含まれている場合は、エンドユーザーのプライバシーを尊重するようにアプリを実装する必要があることに注意してください。Also note that when you use the System.Xml types and members, if the XML contains data that has potential privacy implications, you need to implement your app in a way that respects your end users' privacy.

外部アクセスExternal access

いくつかの XML テクノロジには、処理中に他のドキュメントを取得する機能があります。Several XML technologies have the ability to retrieve other documents during processing. たとえば、解析中のドキュメントにドキュメント型定義 (DTD) が存在する可能性があります。For example, a document type definition (DTD) can reside in the document being parsed. 解析中のドキュメントによって参照されている外部ドキュメントにも、DTD が存在する可能性があります。The DTD can also live in an external document that is referenced by the document being parsed. XML スキーマ定義言語 (XSD) および XSLT テクノロジにも、他のファイルから情報を取り込む機能があります。The XML Schema definition language (XSD) and XSLT technologies also have the ability to include information from other files. これらの外部リソースには、いくつかのセキュリティ上の問題が存在する可能性があります。These external resources can present some security concerns. たとえば、アプリが信頼済みサイトからのみファイルを取得し、取得したファイルに悪意のあるデータが含まれていないことを確認したいとします。For example, you'll want to ensure that your app retrieves files only from trusted sites, and that the file it retrieves doesn't contain malicious data.

クラスは、 XmlUrlResolver XML ドキュメントを読み込み、エンティティ、dtd、スキーマなどの外部リソース、およびインポートディレクティブやインクルードディレクティブを解決するために使用されます。The XmlUrlResolver class is used to load XML documents and to resolve external resources such as entities, DTDs, or schemas, and import or include directives.

このクラスをオーバーライドして、 XmlResolver 使用するオブジェクトを指定できます。You can override this class and specify the XmlResolver object to use. 制御対象外の (信頼できない) リソースを開く場合には、XmlSecureResolver クラスを使用します。Use the XmlSecureResolver class if you need to open a resource that you do not control, or that is untrusted. XmlSecureResolverXmlResolver をラップしたもので、元の XmlResolver がアクセスできるリソースを制限できます。The XmlSecureResolver wraps an XmlResolver and allows you to restrict the resources that the underlying XmlResolver has access to.

サービス拒否Denial of service

次のシナリオは、サービス不能攻撃に対する脆弱性が低いと考えられます。これは、System.Xml クラスによって、そのような攻撃に対する保護手段が提供されるためです。The following scenarios are considered to be less vulnerable to denial of service attacks because the System.Xml classes provide a means of protection from such attacks.

  • テキスト XML データの解析。Parsing text XML data.

  • バイナリ xml データが Microsoft SQL Server によって生成された場合のバイナリ XML データの解析。Parsing binary XML data if the binary XML data was generated by Microsoft SQL Server.

  • データ ソースからファイル システム、ストリーム、TextWriter、または StringBuilder への XML ドキュメントおよびフラグメントの書き込み。Writing XML documents and fragments from data sources to the file system, streams, a TextWriter, or a StringBuilder.

  • XmlReader オブジェクトを使用し、XmlReaderSettings.DtdProcessingDtdProcessing.Prohibit に設定されている場合のドキュメント オブジェクト モデル (DOM) オブジェクトへのドキュメントの読み込み。Loading documents into the Document Object Model (DOM) object if you are using an XmlReader object and XmlReaderSettings.DtdProcessing set to DtdProcessing.Prohibit.

  • DOM オブジェクトの移動。Navigating the DOM object.

サービス不能攻撃の心配がある場合、または信頼できない環境を使用している場合、次のシナリオは推奨されません。The following scenarios are not recommended if you are concerned about denial of service attacks, or if you are working in an untrusted environment.

  • DTD 処理。DTD processing.

  • スキーマ処理。Schema processing. これには、信頼されていないスキーマのスキーマ コレクションへの追加、信頼されていないスキーマのコンパイル、および信頼されていないスキーマを使用した検証が含まれます。This includes adding an untrusted schema to the schema collection, compiling an untrusted schema, and validating by using an untrusted schema.

  • XSLT 処理。XSLT processing.

  • ユーザーから提供されたバイナリ XML データの任意のスリームの解析。Parsing any arbitrary stream of user supplied binary XML data.

  • クエリ、編集、ドキュメント間でのサブツリーの移動、DOM オブジェクトの保存などの DOM 操作。DOM operations such as querying, editing, moving sub-trees between documents, and saving DOM objects.

サービス拒否の問題が懸念される場合や、信頼されていないソースを扱う場合は、DTD 処理を有効にしないでください。If you are concerned about denial of service issues or if you are dealing with untrusted sources, do not enable DTD processing. メソッドによって作成されるオブジェクトでは、この設定は既定で無効になってい XmlReader XmlReader.Create ます。This is disabled by default on XmlReader objects that the XmlReader.Create method creates.

注意

XmlTextReader では、DTD 処理が既定で許可されます。The XmlTextReader allows DTD processing by default. XmlTextReader.DtdProcessing プロパティを使用してこの機能を無効にします。Use the XmlTextReader.DtdProcessing property to disable this feature.

DTD 処理が有効になっている場合は、クラスを使用して XmlSecureResolver 、がアクセスできるリソースを制限でき XmlReader ます。If you have DTD processing enabled, you can use the XmlSecureResolver class to restrict the resources that the XmlReader can access. また、XML 処理がメモリおよび時間の制約を受けるようにアプリを設計することもできます。You can also design your app so that the XML processing is memory and time constrained. たとえば、ASP.NET アプリでタイムアウト制限を構成できます。For example, you can configure timeout limits in your ASP.NET app.

処理に関する考慮事項Processing considerations

XML ドキュメントには他のファイルへの参照を含めることが可能なため、XML ドキュメントの解析に必要な処理能力を確定することは困難です。Because XML documents can include references to other files, it is difficult to determine how much processing power is required to parse an XML document. たとえば、XML ドキュメントには DTD を含めることができます。For example, XML documents can include a DTD. DTD にネストされたエントリや複合コンテンツ モデルが含まれている場合、ドキュメントの解析に長い時間がかかることがあります。If the DTD contains nested entities or complex content models, it could take an excessive amount of time to parse the document.

XmlReader を使用するときには、XmlReaderSettings.MaxCharactersInDocument プロパティを設定することで、解析可能なドキュメントのサイズを制限できます。When using XmlReader, you can limit the size of the document that can be parsed by setting the XmlReaderSettings.MaxCharactersInDocument property. エンティティの展開により生成される文字数を制限するには、XmlReaderSettings.MaxCharactersFromEntities プロパティを設定します。You can limit the number of characters that result from expanding entities by setting the XmlReaderSettings.MaxCharactersFromEntities property. これらのプロパティの設定例については、該当するトピックを参照してください。See the appropriate reference topics for examples of setting these properties.

XSD および XSLT テクノロジには、処理パフォーマンスに影響する可能性のある追加機能があります。The XSD and XSLT technologies have additional capabilities that can affect processing performance. たとえば、比較的小さなドキュメントの評価時に大量の時間を必要とする XML スキーマを作成することが可能です。For example, it is possible to construct an XML schema that requires a substantial amount of time to process when evaluated over a relatively small document. また、XSLT スタイル シート内にスクリプト ブロックを埋め込むことも可能です。It is also possible to embed script blocks within an XSLT style sheet. どちらの場合も、アプリにセキュリティ上の脅威が生じる可能性があります。Both cases pose a potential security threat to your app.

クラスを使用するアプリを作成する場合は、 XslCompiledTransform 次の項目とその影響に注意する必要があります。When creating an app that uses the XslCompiledTransform class, you should be aware of the following items and their implications:

  • XSLT スクリプトは既定で無効になっています。XSLT scripting is disabled by default. XSLT スクリプトは、スクリプトのサポートが必要であり、完全に信頼された環境で作業している場合のみ有効にします。XSLT scripting should be enabled only if you require script support and you are working in a fully trusted environment.

  • XSLT document() 関数は既定で無効になっています。The XSLT document() function is disabled by default. document() 関数を有効にした場合は、XmlSecureResolver オブジェクトを XslCompiledTransform.Transform メソッドに渡すことによって、アクセス可能なリソースを制限してください。If you enable the document() function, restrict the resources that can be accessed by passing an XmlSecureResolver object to the XslCompiledTransform.Transform method.

  • 拡張オブジェクトは既定で有効になっています。Extension objects are enabled by default. 拡張オブジェクトを含む XsltArgumentList オブジェクトが XslCompiledTransform.Transform メソッドに渡されると、拡張オブジェクトは使用されます。If an XsltArgumentList object that contains extension objects is passed to the XslCompiledTransform.Transform method, the extension objects are used.

  • XSLT スタイル シートには、他のファイルへの参照や埋め込みのスクリプト ブロックを含めることができます。XSLT style sheets can include references to other files and embedded script blocks. 悪意のあるユーザーがこれを悪用して、コンピューターがリソース不足に陥るまでシステムに処理を行わせようとするデータやスタイル シートを提供する可能性があります。A malicious user can exploit this by supplying you with data or style sheets that, when executed, can cause your system to process until the computer runs low on resources.

  • 混合信頼環境で実行される XSLT アプリでは、スタイルシートのスプーフィングが発生する可能性があります。XSLT apps that run in a mixed trust environment can result in style sheet spoofing. たとえば、悪意のあるユーザーは、有害なスタイル シートを含むオブジェクトを読み込み、それを XslCompiledTransform.Transform メソッドを呼び出して変換を実行する別のユーザーに渡す可能性があります。For example, a malicious user can load an object with a harmful style sheet and hand it off to another user who subsequently calls the XslCompiledTransform.Transform method and executes the transformation.

これらのセキュリティ上の問題は、スタイル シートが信頼されたソースからのものでない限り、スクリプトや document() 関数を有効にしないこと、および信頼されていないソースからの XslCompiledTransform オブジェクト、XSLT スタイル シート、または XML ソース データを受け入れないことによって軽減できます。These security issues can be mitigated by not enabling scripting or the document() function unless the style sheet comes from a trusted source, and by not accepting XslCompiledTransform objects, XSLT style sheets, or XML source data from an untrusted source.

例外処理Exception handling

下位レベルのコンポーネントによってスローされた例外は、アプリに公開したくないパス情報を開示できます。Exceptions thrown by lower level components can disclose path information that you do not want exposed to the app. アプリは例外をキャッチして適切に処理する必要があります。Your apps must catch exceptions and process them appropriately.

こちらもご覧ください