System.Xml 名前空間

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

クラス

NameTable

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

UniqueId

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

XmlAttribute

1 つの属性を表します。 属性の有効値と既定値は、ドキュメント型定義 (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) が abstract から派生する XmlReader クラス。

XmlDictionaryReaderQuotas

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

XmlDictionaryString

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

XmlDictionaryWriter

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

XmlDocument

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

XmlDocumentFragment

ツリー挿入操作に使用できる、簡易オブジェクトを表します。

XmlDocumentType

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

XmlDocumentXPathExtensions

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

XmlElement

1 つの要素を表します。

XmlEntity

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

XmlEntityReference

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

XmlException

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

XmlImplementation

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

XmlLinkedNode

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

XmlNamedNodeMap

名前またはインデックスによってアクセス可能なノードのコレクションを表します。

XmlNamespaceManager

名前空間の解決、コレクションへの追加と削除を実行します。また、名前空間のスコープ管理機能を提供します。

XmlNameTable

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

XmlNode

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

XmlNodeChangedEventArgs

NodeChangedNodeChangingNodeInsertedNodeInsertingNodeRemovedNodeRemoving の各イベントのデータを提供します。

XmlNodeList

ノードの順序付きコレクションを表します。

XmlNodeReader

XmlNode 内の XML データに対する、高速で非キャッシュの前方向アクセスを提供するリーダーを表します。

XmlNotation

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

XmlParserContext

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

XmlProcessingInstruction

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

XmlQualifiedName

XML 修飾名を表します。

XmlReader

XML データへの高速で非キャッシュの前方向アクセスを提供するリーダーを表します。

XmlReaderSettings

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

XmlResolver

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

XmlSecureResolver

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

XmlSignificantWhitespace

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

XmlText

要素または属性のテキストの内容を表します。

XmlTextReader

XML データへの高速で非キャッシュの前方向アクセスを提供するリーダーを表します。

.NET Framework 2.0 以降では、代わりに XmlReader クラスを使用することをお勧めします。

XmlTextWriter

W3C 勧告『Extensible Markup Language (XML) 1.0』および勧告『Namespaces in XML』に準拠する XML データを格納するストリームまたはファイルを高速に、非キャッシュで、前方向に生成する方法を提供するライターを表します。

.NET Framework 2.0 以降では、代わりに XmlWriter クラスを使用することをお勧めします。

XmlUrlResolver

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

XmlValidatingReader

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

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

XmlWhitespace

要素の内容の中にある空白を表します。

XmlWriter

XML データが格納されたストリームまたはファイルを、高速かつ非キャッシュで前方のみに生成する方法を提供するライターを表します。

XmlWriterSettings

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

XmlXapResolver

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

インターフェイス

IApplicationResourceStreamResolver

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

IFragmentCapableXmlDictionaryWriter

XmlDictionaryWriter で実装されると XML フラグメントの処理を可能にする、プロパティとメソッドを含みます。

IHasXmlNode

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

IStreamProvider

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

IXmlBinaryReaderInitializer

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

IXmlBinaryWriterInitializer

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

IXmlDictionary

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

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 型を表します。 これにより、文字列を CDATA セクション型などの特定の XML 型として読み取ることができます。

代理人

OnXmlDictionaryReaderClose

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

XmlNodeChangedEventHandler

NodeChangedNodeChangingNodeInsertedNodeInsertingNodeRemovedNodeRemoving の各イベントを処理するメソッドを表します。

注釈

サポートされている標準

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

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

.NET には、XML 関連の操作用の他の名前空間も用意されています。 リスト、説明、リンクについては、「 名前空間のSystem.Xml」を参照してください。

XML の非同期処理

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

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

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

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

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

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

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

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 の参照は、e1 型の要素 t1 または e2 型の要素 t2 になる場合があります。 後者の場合、2 つの e2 要素のシーケンスが発生します。1 つは 型 t2 で、もう 1 つは 型 xs:intです。

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

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

  • グループ内の要素の 1 つが、別の要素を参照している。

  • 参照されている要素が代替グループの head 要素である。

  • 置換グループには、グループ内の要素の 1 つと同じ名前の要素が含まれています。

  • 置換グループ head 要素と置換グループ要素と同じ名前の要素を参照する要素のカーディナリティは固定されていません (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 を検証しようとすると、"未処理の例外: System.Xml。Schema.XmlSchemaValidationException: 'e2' el 要素が無効です - 値 'abc' はデータ型 'http://www.w3.org/2001/XMLSchema:int' に従って無効です-文字列 'abc' は有効な Int32 値ではありません。"

<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 ドキュメントおよびフラグメントの書き込み。

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

  • DOM オブジェクトの移動。

サービス不能攻撃の心配がある場合、または信頼できない環境を使用している場合、次のシナリオは推奨されません。

  • DTD 処理。

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

  • XSLT 処理。

  • ユーザーから提供されたバイナリ XML データの任意のスリームの解析。

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

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

Note

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 ソース データを受け入れないことによって軽減できます。

例外処理

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

こちらもご覧ください