ホームページ  >  記事  >  バックエンド開発  >  .NET Framework で XML データを簡単に処理する (1-2)

.NET Framework で XML データを簡単に処理する (1-2)

黄舟
黄舟オリジナル
2016-12-20 14:02:571235ブラウズ

?XmlReader クラス

??XML ブラウザは、XML ドキュメントに接続して必要なデータを「引き出す」ために使用されるプログラミング インターフェイスをサポートしています。ブラウザをより深く理解すると、ブラウザがデスクトップ アプリケーションがデータベースからデータを取得する方法と同じように機能することがわかります。データベース サービスは、すべてのクエリ結果セットを含むカーソル オブジェクトを返し、ターゲット データ セットの開始アドレスへの参照を返します。 XML ブラウザのクライアントは、ブラウザ インスタンスへの参照を受け取ります。この例では、基礎となるデータ ストリームを抽出し、取得したデータを XML ツリーとして表示します。ブラウザ クラスは読み取り専用の前方カーソルを提供します。ブラウザ クラスが提供するメソッドを使用して、カーソルを回転し、結果セット内の各データを走査できます。

??ブラウザから表示される XML ドキュメントは、タグ付きのテキスト ファイルではなく、シリアル化されたノードの集合体です。これは .NET Framework の特殊なカーソル モードであり、.NET Framework には他の同様の API 関数はありません。

??ブラウザと XMLDOM パーサーの間にはいくつかの違いがあります。 XML ブラウザには入力専用であり、親、子、祖先、兄弟ノードの概念はなく、読み取り専用です。 .NET Framework では、XML ドキュメントの読み取りと書き込みは 2 つのまったく異なる関数に分割され、それぞれ XmlReader クラスと XmlWriter クラスによって実行されます。 XML ドキュメントを編集するには、XMLDOM パーサーを使用するか、これら 2 つの機能を実現するクラスを自分で設計することができます。ブラウザのプログラム機能の分析を始めましょう。

??XmlReader は抽象クラスであり、その機能を拡張および拡張できます。ユーザー プログラムは通常、XmlTextReader、XmlValidatingReader、または XmlNodeReader クラスの 3 つのカテゴリに基づいています。これらすべてのクラスには、図 1 に示すプロパティと図 2 に示すメソッドがあります。一部のプロパティの値は実際には実際のブラウザ クラスに関連付けられており、異なるクラスは基本クラスとは異なる場合があることに注意してください。したがって、図 1 の各属性の説明は基本クラスに基づいています。たとえば、CanResolveEntity プロパティは XmlValidatingReader クラスでのみ true を返しますが、他のブラウザ クラスでは false に設定できます。同様に、図 2 の一部のメソッドの実際の戻り値は、クラスごとに異なる場合があります。たとえば、ノード タイプが要素ノードではない場合、属性を含むすべてのメソッドの戻り値のタイプは void になります。

??XmlTextReader クラスは、順方向専用メソッドと読み取り専用メソッドを使用して、XML データ ストリームにすばやくアクセスします。ブラウザはまず XML ドキュメントが整形式かどうかを検証し、整形式でない場合は例外をスローします。 XmlTextReader は、DTD が整形式であることをチェックしますが、DTD を適用してドキュメントを検証することはしません。 XmlTextReader は、ファイル名、URL、またはファイル ストリームから XML ドキュメントを読み込み、XML ドキュメント データを迅速に処理します。ドキュメントのデータを検証する必要がある場合は、XmlValidatingReader クラスを使用できます。

??XmlTextReader クラスのインスタンスは、ハードディスクからのファイルの読み込み、URL アドレスからの読み込み、ストリームからの読み込み、テキストからの XML ドキュメント データの読み取りなど、さまざまな方法で作成できます。 XmlTextReader(file);

??XmlTextReader クラスのすべてのパブリック構造関数では、データ ソースをストリーム、ファイル、またはその他にすることができることに注意してください。 XmlTextReader のデフォルト構造関数は保護されているため、直接適用することはできません。 .NET Framework のすべてのブラウザ クラス (SqlDataReader クラスなど) と同様、ブラウザ オブジェクトが接続されて開かれると、Read メソッドを使用してデータにアクセスできます。最初は、Read メソッドを使用してポインターを最初の要素に移動することしかできません。その後、Read メソッドまたは他のメソッド (Skip、MoveToContent、ReadInnerXml など) を使用してポインターを次のノード要素に移動できます。 XML ドキュメント全体のコンテンツを処理するには、ループを使用して Read メソッドの戻り値に基づいてドキュメント コンテンツを走査します。Read メソッドはブール値を返すため、ドキュメントの末尾ノードが読み取られると、 Read メソッドは false を返し、それ以外の場合は true を返します。



??図 3 XML ドキュメント ノード レイアウトの出力

??string GetXmlFileNodeLayout(string file)
??{
??// ターゲット XML ドキュメントを指す XmlTextReader クラスを作成します
??XmlTextReader リーダー= new XmlTextReader(file);

??// ノードのテキストをループアウトして StringWriter オブジェクト インスタンスに配置します
??StringWriter Writer = new
??string tabPrefix = ''; ??while ( Reader.Read())
??{
??// ノードタイプが要素の場合、開始タグを書き込みます
??if (reader.NodeType == XmlNodeType.Element)
??{
??//要素に従ってノードの深さにreader.Depthタブ文字を追加し、<>に要素名を記述します。
??tabPrefix = new string('t', Reader.Depth);
??writer.WriteLine('{0}<{1}>', tabPrefix, Reader.Name); ?else
??{
??//ノード タイプが要素の場合、終了タグを書き込みます
??if (reader.NodeType == XmlNodeType.EndElement)
??{
??tabPrefix = new string('読者さん、深さ);??writer.WriteLine('{0}', tabPrefix, Reader.Name);
??}
??}
??}

??//画面に出力
??string buf =writer.ToString ( );
??writer.Close();

??// クローズドフロー
??reader.Close();

??return buf;この関数は、まず XML ドキュメントを開き、次にループを使用して XML ドキュメントのすべてのコンテンツを処理します。 Read メソッドが呼び出されるたびに、ブラウザのポインタは 1 ノード下に移動します。ほとんどの場合、Read メソッドは要素ノードを処理できますが、あるノードから次のノードに移動するときに、2 つの異なるタイプのノード間を移動することになる場合があります。ただし、Read メソッドは属性ノード間を移動できません。ブラウザの MoveToContent メソッドを使用すると、ポインタをヘッド ノードの位置から最初のコンテンツ ノードの位置にジャンプできます。 Skip メソッドを使用して、Processingstruction、DocumentType、Comment、Whitespace、および SignificantWhitespace タイプのノードにポインターを移動することもできます。

上記は、.NET Framework で XML データを簡単に処理する内容 (1-2) です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。