次の方法で共有


XmlTextReader.Normalization プロパティ

空白と属性値を正規化するかどうかを示す値を取得または設定します。

Public Property Normalization As Boolean
[C#]
public bool Normalization {get; set;}
[C++]
public: __property bool get_Normalization();public: __property void set_Normalization(bool);
[JScript]
public function get Normalization() : Boolean;public function set Normalization(Boolean);

プロパティ値

正規化する場合は true 。それ以外の場合は false 。既定値は false です。

例外

例外の種類 条件
InvalidOperationException リーダーが閉じているとき (ReadState が ReadState.Closed のとき) にこのプロパティを設定します。

解説

このプロパティはいつでも変更でき、次の読み取り操作時に有効となります。

メモ    XmlTextReader を使用して XmlValidatingReader を構築し、属性値を正規化する場合は、Normalization を true に設定する必要があります。

Normalization を false に設定すると、数値エンティティをチェックする文字範囲も無効になります。その結果、 � などの文字エンティティが許可されます。

属性値の正規化について次に説明します。

  • 文字参照の場合は、参照する文字を属性値に付け加えます。
  • エンティティ参照の場合は、エンティティの置換テキストを再帰的に処理します。
  • 空白文字 (#x20、#xD、#xA、#x9) の場合は、正規化した値に #x20 を付け加えます外部解析エンティティの一部または内部解析エンティティのリテラル エンティティ値である "#xD#xA" シーケンスに対しては、単一の #x20 だけが付け加えられます。
  • これらの空白文字を正規化した値に付け加えて、他の文字を処理します。
  • 宣言された値が CDATA でない場合は、前後の空白 (#x20) 文字をすべて破棄し、連続した空白 (#x20) 文字を単一の空白 (#x20) 文字に置き換えます。

正規化の詳細については、W3C 勧告『XML 1.0』を参照してください。

使用例

[Visual Basic, C#, C++] 正規化をオンにし、次にオフにしたときのリーダーの動作を次の例に示します。

 
Imports System
Imports System.IO
Imports System.Xml
Imports Microsoft.VisualBasic

public class Sample

  public shared sub Main()

    ' Create the XML fragment to be parsed.
    Dim xmlFrag as string = "<item attr1='  test A B C " + Chr(10) & _
                            "   1 2 3'/>" + Chr(10) & _
                            "<item attr2='&#01;'/>"
                    

    ' Create the XmlNamespaceManager.
    Dim nsmgr as XmlNamespaceManager = new XmlNamespaceManager(new NameTable())

    ' Create the XmlParserContext.
    Dim context as XmlParserContext = new XmlParserContext(nothing, nsmgr, nothing, XmlSpace.Preserve)

    ' Create the reader.
    Dim reader as XmlTextReader = new XmlTextReader(xmlFrag, XmlNodeType.Element, context)

    ' Show attribute value normalization.
    reader.Read()
    reader.Normalization = false
    Console.WriteLine("Attribute value:{0}", reader.GetAttribute("attr1"))
    reader.Normalization = true
    Console.WriteLine("Attribute value:{0}", reader.GetAttribute("attr1"))

    ' Set Normalization back to false.  This allows the reader to accept
    ' character entities in the &#00; to &#20; range.  If Normalization had
    ' been set to true, character entities in this range throw an exception.
    reader.Normalization = false
    reader.Read()
    reader.MoveToContent()
    Console.WriteLine("Attribute value:{0}", reader.GetAttribute("attr2"))
  
    ' Close the reader.
    reader.Close()     
  
  end sub
end class

[C#] 
using System;
using System.IO;
using System.Xml;

public class Sample{

  public static void Main(){

    // Create the XML fragment to be parsed.
    string xmlFrag  = 
    @"<item attr1='  test A B C
        1 2 3'/>
      <item attr2='&#01;'/>";                         

    // Create the XmlNamespaceManager.
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());

    // Create the XmlParserContext.
    XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.Preserve);

    // Create the reader.
    XmlTextReader reader = new XmlTextReader(xmlFrag, XmlNodeType.Element, context);

    // Show attribute value normalization.
    reader.Read();
    reader.Normalization = false;
    Console.WriteLine("Attribute value:{0}", reader.GetAttribute("attr1"));
    reader.Normalization = true;
    Console.WriteLine("Attribute value:{0}", reader.GetAttribute("attr1"));

    // Set Normalization back to false.  This allows the reader to accept
    // character entities in the &#00; to &#20; range.  If Normalization had
    // been set to true, character entities in this range throw an exception.
    reader.Normalization = false;
    reader.Read();
    reader.MoveToContent();
    Console.WriteLine("Attribute value:{0}", reader.GetAttribute("attr2"));
  
    // Close the reader.
    reader.Close();     
  
  }
}

[C++] 
#using <mscorlib.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;

int main() 
{
   // Create the XML fragment to be parsed.
   String* xmlFrag  = 
      S"<item attr1='  test A B C\n"
      S"1 2 3'/>\n"
      S"<item attr2='&#01;'/>\n";

   // Create the XmlNamespaceManager.
   XmlNamespaceManager* nsmgr = new XmlNamespaceManager(new NameTable());

   // Create the XmlParserContext.
   XmlParserContext* context = new XmlParserContext(0, nsmgr, 0, XmlSpace::Preserve);

   // Create the reader.
   XmlTextReader* reader = new XmlTextReader(xmlFrag, XmlNodeType::Element, context);

   // Show attribute value normalization.
   reader -> Read();
   reader -> Normalization = false;
   Console::WriteLine(S"Attribute value: {0}", reader -> GetAttribute(S"attr1"));
   reader -> Normalization = true;
   Console::WriteLine(S"Attribute value: {0}", reader -> GetAttribute(S"attr1"));

   // Set Normalization back to false.  This allows the reader to accept
   // character entities in the &#00; to &#20; range.  If Normalization had
   // been set to true, character entities in this range throw an exception.
   reader -> Normalization = false;
   reader -> Read();
   reader -> MoveToContent();
   Console::WriteLine(S"Attribute value: {0}", reader -> GetAttribute(S"attr2"));

   // Close the reader.
   reader -> Close();       
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

XmlTextReader クラス | XmlTextReader メンバ | System.Xml 名前空間