次の方法で共有


System.Xml 名前空間

XML の処理に関する標準ベースのサポートを提供します。

クラス

名前 説明
NameTable

シングル スレッドの XmlNameTableを実装します。

UniqueId

Guid 用に最適化された一意の識別子。

XmlAttribute

属性を表します。 属性の有効な値と既定値は、ドキュメント型定義 (DTD) またはスキーマで定義されます。

XmlAttributeCollection

名前またはインデックスでアクセスできる属性のコレクションを表します。

XmlBinaryReaderSession

最適化された文字列を動的な方法で管理できるようにします。

XmlBinaryWriterSession

動的ディクショナリを使用して、メッセージに表示される一般的な文字列を圧縮し、状態を維持できるようにします。

XmlCDataSection

CDATA セクションを表します。

XmlCharacterData

複数のクラスで使用されるテキスト操作メソッドを提供します。

XmlComment

XML コメントの内容を表します。

XmlConvert

XML 名をエンコードおよびデコードし、共通言語ランタイム型と XML スキーマ定義言語 (XSD) 型の間で変換するためのメソッドを提供します。 データ型を変換する場合、返される値はロケールに依存しません。

XmlDataDocument

リレーショナル DataSetを介して構造化データを格納、取得、および操作できるようにします。

XmlDeclaration

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

XmlDictionary

Windows Communication Foundation (WCF) の XML リーダー/ライター実装を最適化するために使用されるディクショナリを実装します。

XmlDictionaryReader

シリアル化と逆シリアル化を行うために Windows Communication Foundation (WCF) がXmlReaderから派生するabstract クラス。

XmlDictionaryReaderQuotas

XmlDictionaryReaders の構成可能なクォータ値が含まれています。

XmlDictionaryString

XmlDictionaryに格納されているエントリを表します。

XmlDictionaryWriter

シリアル化と逆シリアル化を行うために Windows Communication Foundation (WCF) が XmlWriter から派生する抽象クラスを表します。

XmlDocument

XML ドキュメントを表します。 このクラスを使用すると、ドキュメント内の XML の読み込み、検証、編集、追加、配置を行うことができます。

XmlDocumentFragment

ツリー挿入操作に役立つ軽量オブジェクトを表します。

XmlDocumentType

ドキュメント型宣言を表します。

XmlDocumentXPathExtensions

ドキュメント ナビゲーションの XmlDocumentXmlNode の拡張メソッドを提供します。

XmlElement

要素を表します。

XmlEntity

<! などのエンティティ宣言を表します。ENTITY... >。

XmlEntityReference

エンティティ参照ノードを表します。

XmlException

最後の例外に関する詳細情報を返します。

XmlImplementation

一連の XmlDocument オブジェクトのコンテキストを定義します。

XmlLinkedNode

このノードの直前または直後のノードを取得します。

XmlNamedNodeMap

名前またはインデックスでアクセスできるノードのコレクションを表します。

XmlNamespaceManager

コレクションに名前空間を解決、追加、および削除し、これらの名前空間のスコープ管理を提供します。

XmlNameTable

アトミック化された文字列オブジェクトの表。

XmlNode

XML ドキュメント内の 1 つのノードを表します。

XmlNodeChangedEventArgs

NodeChangedNodeChangingNodeInsertedNodeInsertingNodeRemoved、およびNodeRemovingイベントのデータを提供します。

XmlNodeList

ノードの順序付けられたコレクションを表します。

XmlNodeReader

XmlNode内の XML データへの高速でキャッシュされていない転送アクセスのみを提供するリーダーを表します。

XmlNotation

<! などの表記宣言を表します。NOTATION... >。

XmlParserContext

XML フラグメントを解析するために XmlReader に必要なすべてのコンテキスト情報を提供します。

XmlProcessingInstruction

処理命令を表します。XML は、ドキュメントのテキストにプロセッサ固有の情報を保持するように定義します。

XmlQualifiedName

XML 修飾名を表します。

XmlReader

XML データへの高速でキャッシュされていない転送専用アクセスを提供するリーダーを表します。

XmlReaderSettings

Create メソッドによって作成されたXmlReader オブジェクトでサポートする機能のセットを指定します。

XmlResolver

Uniform Resource Identifier (URI) によって名前が付けられた外部 XML リソースを解決します。

XmlSecureResolver

XmlResolver オブジェクトをラップし、基になるXmlResolverがアクセスできるリソースを制限することで、XmlResolverの別の実装をセキュリティで保護するのに役立ちます。

XmlSignificantWhitespace

混合コンテンツ ノード内のマークアップ間の空白、または xml:space= 'preserve' スコープ内の空白を表します。 これは、重要な空白とも呼ばれます。

XmlText

要素または属性のテキスト コンテンツを表します。

XmlTextReader

XML データへの高速でキャッシュされていない転送専用アクセスを提供するリーダーを表します。

代わりに XmlReader クラスを使用することをお勧めします。

XmlTextWriter

W3C 拡張マークアップ言語 (XML) 1.0 および XML 推奨事項の名前空間に準拠する XML データを含むストリームまたはファイルを、キャッシュされていない高速かつ前方専用の方法で生成するライターを表します。

代わりに XmlWriter クラスを使用することをお勧めします。

XmlUrlResolver

Uniform Resource Identifier (URI) によって名前が付けられた外部 XML リソースを解決します。

XmlValidatingReader

ドキュメント型定義 (DTD)、XML-Data 縮小 (XDR) スキーマ、および XML スキーマ定義言語 (XSD) 検証を提供するリーダーを表します。

このクラスは今後は使用しません。 検証 XML リーダーを作成するには、 XmlReaderSettings クラスと Create メソッドを使用することをお勧めします。

XmlWhitespace

要素コンテンツの空白を表します。

XmlWriter

XML データを含むストリームまたはファイルを生成するための高速でキャッシュされていない順方向専用の方法を提供するライターを表します。

XmlWriterSettings

Create メソッドによって作成されたXmlWriter オブジェクトでサポートする機能のセットを指定します。

XmlXapResolver

XmlXapResolver 型は、Silverlight アプリケーションの XAP パッケージ内のリソースを解決するために使用されます。

インターフェイス

名前 説明
IApplicationResourceStreamResolver

アプリケーション リソース ストリーム リゾルバーを表します。

IFragmentCapableXmlDictionaryWriter

XmlDictionaryWriterによって実装された場合に XML フラグメントの処理を許可するプロパティとメソッドが含まれます。

IHasXmlNode

クラスが現在のコンテキストまたは位置から XmlNode を返すようにします。

IStreamProvider

ストリームを提供するクラスによって実装できるインターフェイスを表します。

IXmlBinaryReaderInitializer

バイナリ リーダーを再初期化して新しいドキュメントを読み取るためのメソッドを提供します。

IXmlBinaryWriterInitializer

このインターフェイスから派生する XML バイナリ ライターの実装要件を指定します。

IXmlDictionary

XmlDictionaryReaderおよびXmlDictionaryWriterの実装で使用するために Xml ディクショナリが実装する必要があるコントラクトを定義するinterface

IXmlLineInfo

クラスが行と位置情報を返せるようにするためのインターフェイスを提供します。

IXmlMtomReaderInitializer

このインターフェイスから派生する XML MTOM リーダーの実装要件を指定します。

IXmlMtomWriterInitializer

MTOM ライターによって実装された場合、このインターフェイスによって MTOM ライターの初期化が保証されます。

IXmlNamespaceResolver

プレフィックスと名前空間のマッピングのセットへの読み取り専用アクセスを提供します。

IXmlTextReaderInitializer

このインターフェイスから派生する XML テキスト リーダーの実装要件を指定します。

IXmlTextWriterInitializer

このインターフェイスから派生する XML テキスト ライターの実装要件を指定します。

列挙型

名前 説明
ConformanceLevel

XmlReader および XmlWriter オブジェクトが実行する入力または出力チェックの量を指定します。

DtdProcessing

DTD を処理するためのオプションを指定します。 DtdProcessing 列挙型は、XmlReaderSettings クラスによって使用されます。

EntityHandling

XmlTextReader または XmlValidatingReader がエンティティを処理する方法を指定します。

Formatting

XmlTextWriterの書式設定オプションを指定します。

NamespaceHandling

XmlWriterで重複する名前空間宣言を削除するかどうかを指定します。

NewLineHandling

改行の処理方法を指定します。

ReadState

リーダーの状態を指定します。

ValidationType

実行する検証の種類を指定します。

WhitespaceHandling

空白の処理方法を指定します。

WriteState

XmlWriterの状態を指定します。

XmlDateTimeSerializationMode

文字列と DateTimeの間で変換するときの時間値の処理方法を指定します。

XmlDictionaryReaderQuotaTypes

XmlDictionaryReaders の構成可能なクォータ値を列挙します。

XmlNamespaceScope

名前空間スコープを定義します。

XmlNodeChangedAction

ノード変更の種類を指定します。

XmlNodeOrder

2 番目のノードと比較したノードのドキュメントの順序について説明します。

XmlNodeType

ノードの種類を指定します。

XmlOutputMethod

XmlWriter 出力のシリアル化に使用するメソッドを指定します。

XmlSpace

現在の xml:space スコープを指定します。

XmlTokenizedType

文字列の XML 型を表します。 これにより、文字列を特定の XML 型 (CDATA セクション型など) として読み取ることができます。

代理人

名前 説明
OnXmlDictionaryReaderClose

delegate リーダーを閉じるときにコールバック メソッドの場合。

XmlNodeChangedEventHandler

NodeChangedNodeChangingNodeInsertedNodeInsertingNodeRemoved、およびNodeRemovingイベントを処理するメソッドを表します。

注釈

サポートされている標準

System.Xml名前空間では、次の標準がサポートされています。

XML クラスが W3C の推奨事項と異なる 2 つのケースについては、「W3C 仕様との違い」セクションを参照してください。

XML の非同期処理

System.Xml.XmlReaderクラスとSystem.Xml.XmlWriter クラスには、非同期プログラミング モデルに基づく多くの非同期メソッドが含まれています。 これらのメソッドは、名前の末尾にある文字列 "Async" で識別できます。 これらのメソッドを使用すると、同期コードに似た非同期コードを記述でき、既存の同期コードを非同期コードに簡単に移行できます。

  • ネットワーク ストリームの待機時間が大幅に長いアプリで非同期メソッドを使用します。 メモリ ストリームまたはローカル ファイル ストリームの読み取り/書き込み操作には非同期 API を使用しないでください。 入力ストリーム、 XmlTextReader、および XmlTextWriter も非同期操作をサポートする必要があります。 それ以外の場合、スレッドは引き続き I/O 操作によってブロックされます。

  • 同期関数呼び出しと非同期関数呼び出しを混在させるのはお勧めしません。 await キーワードの使用を忘れたり、非同期のキーワードが必要な場合は同期 API を使用したりする可能性があるためです。

  • 非同期メソッドを使用しない場合は、 XmlReaderSettings.Async または XmlWriterSettings.Async フラグを true に設定しないでください。

  • 非同期メソッドを呼び出すときに await キーワードを指定し忘れた場合、結果は非決定的です。予期した結果や例外が発生する可能性があります。

  • XmlReader オブジェクトは、大きなテキスト ノードを読み取るときに、部分的なテキスト値のみをキャッシュしてテキスト ノードを返す可能性があるため、XmlReader.Value プロパティの取得は I/O 操作によってブロックされる可能性があります。 XmlReader.GetValueAsync メソッドを使用して非同期モードでテキスト値を取得するか、XmlReader.ReadValueChunkAsync メソッドを使用して大きなテキスト ブロックをチャンク単位で読み取ります。

  • XmlWriter オブジェクトを使用する場合は、I/O 操作をブロックしないように、XmlWriter.Closeを呼び出す前に XmlWriter.FlushAsync メソッドを呼び出します。

W3C 仕様との違い

モデル グループ スキーマ コンポーネントに制約が関係する 2 つのケースでは、 System.Xml 名前空間は W3C の推奨事項とは異なります。

要素宣言の一貫性:

置換グループを使用する場合、 System.Xml の実装は、W3C 仕様の 「モデル グループ スキーマ コンポーネントの制約 」セクションで説明されている"スキーマ コンポーネント制約: 要素宣言整合性" を満たさない場合があります。

たとえば、次のスキーマには、同じ名前を持ち、同じコンテンツ モデル内で異なる型を持つ要素が含まれており、置換グループが使用されます。 これによりエラーが発生しますが、 System.Xml はエラーなしでスキーマをコンパイルして検証します。

<?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 型に要素のシーケンスが含まれています。 置換により、シーケンスからの要素e1への参照は、t1型の要素e1、またはt2型の要素e2になります。 後者のケースでは、2 つの e2 要素のシーケンスが発生します。1 つは t2 型で、もう 1 つは xs:int 型です。

固有のパーティクル属性:

次の条件では、 System.Xml の実装は、W3C 仕様の モデル グループ スキーマ コンポーネントの制約 セクションで説明されている"スキーマ コンポーネント制約: 一意のパーティクル属性" を満たしていません。

  • グループ内のいずれかの要素が別の要素を参照しています。
  • 参照される要素は、置換グループのヘッド要素です。
  • 置換グループには、グループ内の要素の 1 つと同じ名前を持つ要素が含まれています。
  • 置換グループのヘッド要素を参照する要素と、置換グループ要素と同じ名前の要素のカーディナリティは固定されていません (minOccurs < maxOccurs)。
  • 置換グループを参照する要素の定義は、置換グループ要素と同じ名前を持つ要素の定義の前にあります。

たとえば、以下のスキーマでは、コンテンツ モデルはあいまいであり、コンパイル エラーが発生しますが、 System.Xml はエラーなしでスキーマをコンパイルします。

<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 例外がスローされます。

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

この問題を回避するには、XSD ドキュメントで要素の宣言を入れ替えることができます。 例えば次が挙げられます。

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

は次のようになります。

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

同じ問題の別の例を次に示します。

<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 を検証しようとすると、"Unhandled Exception: System.Xml.Schema.XmlSchemaValidationException: 'e2' el element is invalid - The value 'abc' is invalid according its datatype 'http://www.w3.org/2001/XMLSchema:int' - The string 'abc' is not a valid Int32 value" (ハンドルされない例外: System.Xml.Schema.XmlSchemaValidationException: 'e2' el element is invalid according to its datatype - The string 'abc' is not a valid Int32 value" (ハンドルされない例外: System.Xml.Schema.XmlSchemaValidationException: 'e2' el element is invalid - The value 'abc' is invalid int32 value.

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

セキュリティに関する考慮事項

System.Xml名前空間の型とメンバーは、.NET セキュリティ システムに依存します。 以降のセクションでは、XML テクノロジに固有のセキュリティの問題について説明します。

また、 System.Xml 型とメンバーを使用する場合、XML に潜在的なプライバシーへの影響があるデータが含まれている場合は、エンド ユーザーのプライバシーを尊重する方法でアプリを実装する必要があることに注意してください。

外部アクセス

いくつかの XML テクノロジでは、処理中に他のドキュメントを取得できます。 たとえば、ドキュメント型定義 (DTD) は、解析対象のドキュメント内に存在できます。 DTD は、解析中のドキュメントによって参照される外部ドキュメント内に存在することもできます。 XML スキーマ定義言語 (XSD) および XSLT テクノロジには、他のファイルからの情報を含める機能もあります。 これらの外部リソースには、セキュリティ上の問題が存在する場合があります。 たとえば、アプリが信頼済みサイトからのみファイルを取得し、取得するファイルに悪意のあるデータが含まれていないことを確認します。

XmlUrlResolver クラスは、XML ドキュメントの読み込みと、エンティティ、DTD、スキーマなどの外部リソースの解決、およびディレクティブのインポートまたはインクルードに使用されます。

このクラスをオーバーライドし、使用する XmlResolver オブジェクトを指定できます。 制御しないリソースまたは信頼されていないリソースを開く必要がある場合は、 XmlSecureResolver クラスを使用します。 XmlSecureResolverXmlResolverをラップし、基になるXmlResolverがアクセスできるリソースを制限できます。

サービス拒否

次のシナリオは、 System.Xml クラスがこのような攻撃から保護する手段を提供するため、サービス拒否攻撃に対する脆弱性が低いと見なされます。

  • テキスト XML データの解析。

  • バイナリ XML データが Microsoft SQL Server によって生成された場合のバイナリ XML データの解析。

  • データ ソースからファイル システム、ストリーム、 TextWriter、または StringBuilderへの XML ドキュメントとフラグメントの書き込み。

  • ドキュメント オブジェクト モデル (DOM) オブジェクトにドキュメントを読み込む (XmlReader オブジェクトを使用していて、XmlReaderSettings.DtdProcessingDtdProcessing.Prohibitに設定されている場合)。

  • DOM オブジェクト内を移動する。

サービス拒否攻撃が懸念される場合、または信頼されていない環境で作業している場合は、次のシナリオはお勧めしません。

  • DTD 処理。

  • スキーマ処理。 これには、信頼されていないスキーマのスキーマ コレクションへの追加、信頼されていないスキーマのコンパイル、信頼されていないスキーマを使用した検証が含まれます。

  • XSLT 処理。

  • ユーザーが提供するバイナリ XML データの任意のストリームを解析します。

  • クエリ、編集、ドキュメント間のサブツリーの移動、DOM オブジェクトの保存などの DOM 操作。

サービス拒否の問題が懸念される場合、または信頼されていないソースを処理している場合は、DTD 処理を有効にしないでください。 これは、XmlReader.Create メソッドによって作成XmlReaderオブジェクトでは既定で無効になっています。

XmlTextReaderでは、既定で DTD 処理が許可されます。 この機能を無効にするには、 XmlTextReader.DtdProcessing プロパティを使用します。

DTD 処理を有効にしている場合は、 XmlSecureResolver クラスを使用して、 XmlReader がアクセスできるリソースを制限できます。 また、XML 処理がメモリと時間に制約されるようにアプリを設計することもできます。 たとえば、ASP.NET アプリでタイムアウト制限を構成できます。

処理に関する考慮事項

XML ドキュメントには他のファイルへの参照を含めることができるため、XML ドキュメントを解析するために必要な処理能力を判断することは困難です。 たとえば、XML ドキュメントには DTD を含めることができます。 DTD に入れ子になったエンティティまたは複雑なコンテンツ モデルが含まれている場合、ドキュメントの解析に過剰な時間がかかる可能性があります。

XmlReaderを使用する場合は、XmlReaderSettings.MaxCharactersInDocument プロパティを設定することで、解析できるドキュメントのサイズを制限できます。 XmlReaderSettings.MaxCharactersFromEntities プロパティを設定することで、エンティティの展開に起因する文字数を制限できます。 これらのプロパティの設定例については、適切なリファレンス トピックを参照してください。

XSD および XSLT テクノロジには、処理のパフォーマンスに影響を与える可能性がある追加の機能があります。 たとえば、比較的小さなドキュメントで評価される場合、処理にかなりの時間を要する XML スキーマを構築できます。 XSLT スタイル シート内にスクリプト ブロックを埋め込むこともできます。 どちらの場合も、アプリにセキュリティ上の脅威が発生する可能性があります。

XslCompiledTransform クラスを使用するアプリを作成するときは、次の項目とその影響に注意する必要があります。

  • XSLT スクリプトは既定で無効になっています。 XSLT スクリプトは、スクリプトのサポートが必要で、完全に信頼された環境で作業している場合にのみ有効にする必要があります。

  • XSLT document() 関数は既定で無効になっています。 document()関数を有効にする場合は、XmlSecureResolver オブジェクトを XslCompiledTransform.Transform メソッドに渡すことによってアクセスできるリソースを制限します。

  • 拡張機能オブジェクトは既定で有効になっています。 拡張オブジェクトを含む XsltArgumentList オブジェクトを XslCompiledTransform.Transform メソッドに渡すと、拡張オブジェクトが使用されます。

  • XSLT スタイル シートには、他のファイルや埋め込みスクリプト ブロックへの参照を含めることができます。 悪意のあるユーザーは、実行されると、コンピューターのリソースが不足するまでシステムが処理される可能性があるデータまたはスタイル シートをユーザーに提供することによって、これを悪用する可能性があります。

  • 混合信頼環境で実行される XSLT アプリでは、スタイル シートのスプーフィングが発生する可能性があります。 たとえば、悪意のあるユーザーは、有害なスタイル シートを持つオブジェクトを読み込み、後で XslCompiledTransform.Transform メソッドを呼び出して変換を実行する別のユーザーに渡すことができます。

これらのセキュリティの問題を軽減するには、スタイル シートが信頼できるソースから取得されていない限り、スクリプトまたは document() 関数を有効にしないことと、信頼されていないソースから XslCompiledTransform オブジェクト、XSLT スタイル シート、または XML ソース データを受け入れないようにします。

例外処理

下位レベルのコンポーネントによってスローされる例外は、アプリに公開したくないパス情報を開示できます。 アプリは例外をキャッチし、適切に処理する必要があります。

こちらもご覧ください