System.Xml 名前空間
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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から派生する |
| XmlDictionaryReaderQuotas |
XmlDictionaryReaders の構成可能なクォータ値が含まれています。 |
| XmlDictionaryString |
XmlDictionaryに格納されているエントリを表します。 |
| XmlDictionaryWriter |
シリアル化と逆シリアル化を行うために Windows Communication Foundation (WCF) が XmlWriter から派生する抽象クラスを表します。 |
| XmlDocument |
XML ドキュメントを表します。 このクラスを使用すると、ドキュメント内の XML の読み込み、検証、編集、追加、配置を行うことができます。 |
| XmlDocumentFragment |
ツリー挿入操作に役立つ軽量オブジェクトを表します。 |
| XmlDocumentType |
ドキュメント型宣言を表します。 |
| XmlDocumentXPathExtensions |
ドキュメント ナビゲーションの XmlDocument と XmlNode の拡張メソッドを提供します。 |
| XmlElement |
要素を表します。 |
| XmlEntity |
<! などのエンティティ宣言を表します。ENTITY... >。 |
| XmlEntityReference |
エンティティ参照ノードを表します。 |
| XmlException |
最後の例外に関する詳細情報を返します。 |
| XmlImplementation |
一連の XmlDocument オブジェクトのコンテキストを定義します。 |
| XmlLinkedNode |
このノードの直前または直後のノードを取得します。 |
| XmlNamedNodeMap |
名前またはインデックスでアクセスできるノードのコレクションを表します。 |
| XmlNamespaceManager |
コレクションに名前空間を解決、追加、および削除し、これらの名前空間のスコープ管理を提供します。 |
| XmlNameTable |
アトミック化された文字列オブジェクトの表。 |
| XmlNode |
XML ドキュメント内の 1 つのノードを表します。 |
| XmlNodeChangedEventArgs |
NodeChanged、NodeChanging、NodeInserted、NodeInserting、NodeRemoved、およびNodeRemovingイベントのデータを提供します。 |
| XmlNodeList |
ノードの順序付けられたコレクションを表します。 |
| XmlNodeReader |
XmlNode内の XML データへの高速でキャッシュされていない転送アクセスのみを提供するリーダーを表します。 |
| XmlNotation |
<! などの表記宣言を表します。NOTATION... >。 |
| XmlParserContext |
XML フラグメントを解析するために XmlReader に必要なすべてのコンテキスト情報を提供します。 |
| XmlProcessingInstruction |
処理命令を表します。XML は、ドキュメントのテキストにプロセッサ固有の情報を保持するように定義します。 |
| XmlQualifiedName |
XML 修飾名を表します。 |
| XmlReader |
XML データへの高速でキャッシュされていない転送専用アクセスを提供するリーダーを表します。 |
| XmlReaderSettings | |
| 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 | |
| XmlXapResolver |
XmlXapResolver 型は、Silverlight アプリケーションの XAP パッケージ内のリソースを解決するために使用されます。 |
インターフェイス
| 名前 | 説明 |
|---|---|
| IApplicationResourceStreamResolver |
アプリケーション リソース ストリーム リゾルバーを表します。 |
| IFragmentCapableXmlDictionaryWriter |
XmlDictionaryWriterによって実装された場合に XML フラグメントの処理を許可するプロパティとメソッドが含まれます。 |
| IHasXmlNode |
クラスが現在のコンテキストまたは位置から XmlNode を返すようにします。 |
| IStreamProvider |
ストリームを提供するクラスによって実装できるインターフェイスを表します。 |
| IXmlBinaryReaderInitializer |
バイナリ リーダーを再初期化して新しいドキュメントを読み取るためのメソッドを提供します。 |
| IXmlBinaryWriterInitializer |
このインターフェイスから派生する XML バイナリ ライターの実装要件を指定します。 |
| IXmlDictionary |
XmlDictionaryReaderおよびXmlDictionaryWriterの実装で使用するために Xml ディクショナリが実装する必要があるコントラクトを定義する |
| IXmlLineInfo |
クラスが行と位置情報を返せるようにするためのインターフェイスを提供します。 |
| IXmlMtomReaderInitializer |
このインターフェイスから派生する XML MTOM リーダーの実装要件を指定します。 |
| IXmlMtomWriterInitializer |
MTOM ライターによって実装された場合、このインターフェイスによって MTOM ライターの初期化が保証されます。 |
| IXmlNamespaceResolver |
プレフィックスと名前空間のマッピングのセットへの読み取り専用アクセスを提供します。 |
| IXmlTextReaderInitializer |
このインターフェイスから派生する XML テキスト リーダーの実装要件を指定します。 |
| IXmlTextWriterInitializer |
このインターフェイスから派生する XML テキスト ライターの実装要件を指定します。 |
列挙型
| 名前 | 説明 |
|---|---|
| ConformanceLevel | |
| 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 |
現在の |
| XmlTokenizedType |
文字列の XML 型を表します。 これにより、文字列を特定の XML 型 (CDATA セクション型など) として読み取ることができます。 |
代理人
| 名前 | 説明 |
|---|---|
| OnXmlDictionaryReaderClose |
|
| XmlNodeChangedEventHandler |
NodeChanged、NodeChanging、NodeInserted、NodeInserting、NodeRemoved、およびNodeRemovingイベントを処理するメソッドを表します。 |
注釈
サポートされている標準
System.Xml名前空間では、次の標準がサポートされています。
- XML 1.0 (DTD サポートを含む)
- ストリーム レベルと DOM の両方の XML 名前空間
- XML スキーマ
- XPath 式
- XSLT 変換
- DOM レベル 1 コア
- DOM レベル 2 コア
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 クラスを使用します。 XmlSecureResolverはXmlResolverをラップし、基になる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 ソース データを受け入れないようにします。
例外処理
下位レベルのコンポーネントによってスローされる例外は、アプリに公開したくないパス情報を開示できます。 アプリは例外をキャッチし、適切に処理する必要があります。