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

黄舟
リリース: 2016-12-20 14:05:48
オリジナル
1234 人が閲覧しました

??属性値の分析

??ほとんどの場合、属性値は単純なテキスト文字列です。ただし、実際のアプリケーションにおけるすべての属性値が文字型であることを意味するわけではありません。属性値は、Date や Boolean など、さまざまな種類のデータの組み合わせである場合があります。この場合、XmlConvert または System.Convevt クラス メソッドを使用して、これらの型を元の型に変換する必要があります。 XmlConvert クラスと System.Convevt クラスはどちらもデータ型変換を実装できますが、XmlConvert クラスは、現在の型に関係なく、XSD で指定されたデータ型に基づいて変換します。

??次の XML データ フラグメントがあるとします。

??

??まず、birthday 属性値が 2001 年 2 月 8 日であることを確認します。 System.Convert クラスを使用して文字列を に変換するとします。 NET Framework の DateTime 型。この方法で、これを日付型として適用できます。対照的に、XmlConvert クラスを使用して文字列を変換する場合、XmlConvert クラスは文字列内の日付を正確に解釈できないため、解析エラーが発生します。 XML では、日付データの形式は YYYY-MM-DD の形式でなければならないためです。 XmlConvert クラスは、CLR 型と XSD 型の間の相互変換を担当します。変換作業が発生した場合、変換結果は部分的になります。

??一部のソリューションでは、属性値はプレーン テキストとエンティティで構成されます。すべてのブラウザー クラスの中で、エンティティを処理できるのは XmlValidatingReader クラスだけです。 XmlTextReader はエンティティを扱うことはできませんが、属性値に同時に出現するテキスト値のみを取り出すことができます。この場合、単純な読み取りメソッドの代わりに ReadAttributeValue メソッドを使用して属性値の内容を分析する必要があります。

??ReadAttributeValue メソッドは属性値を分析し、各構成要素を分離します (プレーン テキストとエンティティの分離など)。 ReadAttributeValue メソッドの戻り値をループ条件として使用して、すべての属性値の要素を走査できます。 XmlTextReader クラスはエンティティを処理できないため、エンティティを処理するクラスを自分で作成できます。次のコード スニペットは、カスタム処理クラスを呼び出す方法を示しています。 / 'reader.Name' 参照を解決し、

??// 結果をバッファに追加します

??buf = YourResolverCode(reader.Name);

??else

??// 値を追加するだけですバッファへの

??buf = Reader.Value;

??}

??すべての属性値が分析されると、ReadAtributeValue メソッドは False を返し、ループが終了します。属性値の最終的な結果は、グローバル変数バッファーの値です。

??XML テキスト (Text) の処理

??XML タグ テキストを処理する場合、正確に処理できない場合、エラーの原因をすぐに特定できます。たとえば、文字変換エラーが発生した場合、非 XML テキストが XML データ ストリームに送信されているはずです。特定のプラットフォームで有効なすべての文字が有効な XML 文字であるわけではありません。 XML 仕様 (www.w3.org/TR/2000/REC-xml-20001006.html) で指定されている有効な文字のみを要素名および属性名として安全に使用できます。

??XmlConvert クラスは、非 XML 標準名を標準 XML 名に変換する機能を提供します。タグ名に無効な XML 文字が含まれている場合、EncodeName メソッドと DecodeName メソッドはそれらの文字をスキーマ準拠の XML 名に調整できます。 SQL Server™ や Microsoft Office を含むこれらのアプリケーションでは、Unicode ドキュメントが許可およびサポートされていますが、これらのドキュメント内の文字の一部は有効な XML 名ではありません。一般的な状況は、スペースを含むデータベース内の列名を扱う場合です。 SQL Server では長い列名が許可されていますが、これは XML ストリームにとって有効な名前ではない可能性があります。スペースは 16 進コード Invoice_0x0020_Details に置き換えられます。次のコードは、プログラム内で文字列を取得する方法を示しています。このメソッドは、XML テキストを元の形式に変換します。完全な 16 進コードのみを変換でき、_0x0020_ のみがスペースとして扱われ、_0x20_ は変換されないことに注意してください。重要か重要ではないかのどちらかです。これは、要素のコンテンツ内またはコメント ステートメント内に表示される場合に実際の意味を表現できるため、重要です。たとえば、次のような状況です:



??

??

??•••

? ?< /MyNode >

?? XML では、スペースは空白 (空白) だけでなく、復帰、改行、インデントも表します。

??XmlTextReader クラスの WhiteSpaceHandling プロパティを通じてスペースを処理できます。このプロパティは、WhiteSpaceHandling 列挙値を受け取り、返します (この列挙クラスには 3 つのオプションの値があります)。デフォルト値は All です。これは、意味のあるスペースと無意味なスペースの両方がノードとして返され、SignificantWhitespace ノードと Whitespace ノードとして区別されることを意味します。 もう 1 つの列挙値は None です。これは、スペースがノードとして返されないことを意味します。最後に、Signficant 列挙値があります。これは、無意味なスペースを無視し、ノード タイプが SignficantWhitespace であるノードのみを返します。 WhiteSpaceHandling プロパティは、ブラウザーの数少ないプロパティの 1 つであることに注意してください。これはいつでも変更でき、読み取り操作に影響を与えます。 Normalization 属性と XmlResolver 属性は「Sensitive」です。

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


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート