XmlTextReader.Normalization Eigenschaft

Definition

Ruft einen Wert ab, der angibt, ob Leerraum und Attributwerte normalisiert werden sollen, oder legt diesen fest.

public:
 property bool Normalization { bool get(); void set(bool value); };
public bool Normalization { get; set; }
member this.Normalization : bool with get, set
Public Property Normalization As Boolean

Eigenschaftswert

Boolean

true, wenn normalisiert wird, andernfalls false. Der Standardwert ist false.

Ausnahmen

Festlegen dieser Eigenschaft, wenn der Reader geschlossen ist (ReadState ist ReadState.Closed).

Beispiele

Im folgenden Beispiel wird das Verhalten des Lesers mit aktivierter Normalisierung und dann deaktiviert.

#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 = "<item attr1='  test A B C\n"
   "1 2 3'/>\n"
   "<item attr2=''/>\n";
   
   // Create the XmlNamespaceManager.
   XmlNamespaceManager^ nsmgr = gcnew XmlNamespaceManager( gcnew NameTable );
   
   // Create the XmlParserContext.
   XmlParserContext^ context = gcnew XmlParserContext( nullptr,nsmgr,nullptr,XmlSpace::Preserve );
   
   // Create the reader.
   XmlTextReader^ reader = gcnew 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 � to  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();
}
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=''/>";

    // 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 � to  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();
  }
}
Imports System.IO
Imports System.Xml

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=''/>"
                    

    ' 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 � to  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

Hinweise

Hinweis

Ab dem .NET Framework 2.0 empfehlen wir, Instanzen mithilfe der XmlReader.Create Methode zu erstellenXmlReader, um neue Funktionen zu nutzen.

Diese Eigenschaft kann jederzeit geändert werden und wirkt sich auf den nächsten Lesevorgang aus.

Hinweis

Wenn dies XmlTextReader zum Erstellen eines XmlValidatingReader, zum Normalisieren von Attributwerten verwendet wird, Normalization muss auf truefestgelegt werden.

Wenn Normalization festgelegt falseist, deaktiviert dies auch die Zeichenbereichsüberprüfung für numerische Entitäten. Daher sind Zeichenentitäten, z &#0;. B. , zulässig.

Im Folgenden wird die Attributwert normalisierung beschrieben:

  • Bei einem Zeichenverweis wird das Zeichen, auf das verwiesen werden soll, dem Attribut angefügt.

  • Bei einem Entitätsverweis muss der Ersetzungstext der Entität rekursiv verarbeitet werden

  • Fügen Sie für ein Leerzeichen (#x20, #xD, #xA, #x9) #x20 an den normalisierten Wert an. (Nur ein einzelnes #x20 wird für eine "#xD#xA"-Sequenz angefügt, die Teil einer externen analysierten Entität oder des Literal-Entitätswerts einer internen analysierten Entität ist.)

  • Andere Zeichen müssen verarbeitet werden, indem sie an den normalisierten Wert angehängt werden.

  • Wenn der deklarierte Wert nicht CDATA ist, verwerfen Sie alle führenden und nachgestellten Leerzeichen (#x20) und ersetzen Sie Sequenzen von Leerzeichen (#x20) durch ein einzelnes Leerzeichen (#x20).

Das einzige Attribut oder die XmlTextReader CDATA-Normalisierung. Die DTD-spezifische Normalisierung wird nicht ausgeführt, es sei denn, es wird innerhalb einer XmlValidatingReader.

Verweisen Sie auf die Empfehlung von W3C XML 1.0, um die Normalisierung weiter zu diskutieren.

Gilt für

Siehe auch