??Attributwerte analysieren
??In den meisten Fällen ist der Attributwert eine einfache Textzeichenfolge. Dies bedeutet jedoch nicht, dass alle Attributwerte in tatsächlichen Anwendungen Zeichentypen sind. Manchmal ist der Attributwert eine Kombination aus vielen Datentypen, z. B. Date oder Boolean. In diesem Fall müssen Sie die Klassenmethoden XmlConvert oder System.Convevt verwenden, um diese Typen in den ursprünglichen Typ zu konvertieren. Sowohl die XmlConvert-Klasse als auch die System.Convevt-Klasse können die Datentypkonvertierung implementieren, aber die XmlConvert-Klasse konvertiert basierend auf dem in der XSD angegebenen Datentyp, unabhängig davon, um welchen Typ es sich derzeit handelt.
?? Angenommen, Sie haben das folgende XML-Datenfragment:
?? Lassen Sie uns zunächst bestätigen, dass der Attributwert „birthday“ der 8. Februar 2001 ist verwenden Die System.Convert-Klasse konvertiert die Zeichenfolge in den DateTime-Typ im .NET Framework, sodass wir sie als Datumstyp verwenden können. Wenn Sie dagegen die XmlConvert-Klasse zum Konvertieren einer Zeichenfolge verwenden, wird ein Analysefehler angezeigt, da die XmlConvert-Klasse das Datum in der Zeichenfolge nicht genau interpretieren kann. Denn in XML muss das Format der Datumsdaten das Format JJJJ-MM-TT haben. Die Klasse XmlConvert ist für die gegenseitige Konvertierung zwischen CLR-Typen und XSD-Typen verantwortlich. Wenn Konvertierungsarbeiten durchgeführt werden, sind die Konvertierungsergebnisse unvollständig.
In einigen Lösungen besteht der Attributwert aus Klartext und Entitäten. Von allen Browserklassen kann nur die Klasse XmlValidatingReader Entitäten verarbeiten. Obwohl XmlTextReader keine Entitäten verarbeiten kann, kann er Textwerte nur dann herausnehmen, wenn sie gleichzeitig in Attributwerten erscheinen. In diesem Fall müssen Sie die ReadAttributeValue-Methode anstelle einer einfachen Lesemethode verwenden, um den Inhalt des Attributwerts zu analysieren.
??Die ReadAttributeValue-Methode analysiert den Attributwert und trennt dann jedes Komponentenelement (z. B. Trennung von Klartext und Entitäten). Sie können den Rückgabewert der ReadAttributeValue-Methode als Schleifenbedingung verwenden, um die Elemente in allen Attributwerten zu durchlaufen. Da die XmlTextReader-Klasse keine Entitäten verarbeiten kann, können Sie selbst eine Klasse für die Verarbeitung von Entitäten schreiben. Der folgende Codeausschnitt zeigt, wie eine benutzerdefinierte Verarbeitungsklasse aufgerufen wird:
??while(reader.ReadAttributeValue())
??{
??if ( Reader. NodeType == ??buf = YourResolverCode(reader.Name);
??else
??// Hängen Sie einfach den Wert an den Puffer
??buf = an reader.Value ;
??}
??Wenn alle Attributwerte analysiert werden, gibt die ReadAtributeValue-Methode False zurück und beendet damit die Schleife. Das Endergebnis des Attributwerts ist der Wert des globalen Variablenpuffers.
??Verarbeiten von XML-Text (Text)
??Wenn wir XML-Tag-Text verarbeiten und dieser nicht korrekt verarbeitet werden kann, kann die Fehlerursache schnell ermittelt werden. Tritt beispielsweise ein Zeichenkonvertierungsfehler auf, muss es sich um die Übertragung von Nicht-XML-Text in einen XML-Datenstrom handeln. Nicht alle Zeichen, die auf einer bestimmten Plattform gültig sind, sind gültige XML-Zeichen. Als Element- und Attributnamen können nur gültige Zeichen verwendet werden, die in der XML-Spezifikation (www.w3.org/TR/2000/REC-xml-20001006.html) angegeben sind.
Die XmlConvert-Klasse bietet die Funktion, Nicht-XML-Standardnamen in Standard-XML-Namen zu konvertieren. Wenn Tag-Namen ungültige XML-Zeichen enthalten, können die Methoden „EncodeName“ und „DecodeName“ sie in Schema-kompatible XML-Namen umwandeln. Diese Anwendungen, einschließlich SQL Server™ und Microsoft Office, ermöglichen und unterstützen Unicode-Dokumente. Einige der Zeichen in diesen Dokumenten sind jedoch keine gültigen XML-Namen. Eine typische Situation ist, wenn Sie es mit Spaltennamen in der Datenbank zu tun haben, die Leerzeichen enthalten. Obwohl SQL Server lange Spaltennamen zulässt, ist dies möglicherweise kein gültiger Name für den XML-Stream. Leerzeichen werden durch den Hexadezimalcode Invoice_0x0020_Details ersetzt. Der folgende Code zeigt, wie man die Zeichenfolge im Programm erhält:
??XmlConvert.EncodeName('Invoice Details');
??Die entgegengesetzte Methode ist DecodeName. Diese Methode konvertiert den XML-Text in sein Originalformat. Beachten Sie, dass nur vollständige Hexadezimalcodes konvertiert werden können, nur _0x0020_ wird als Leerzeichen behandelt und _0x20_ ist nicht:
??XmlConvert.DecodeName('Invoice_0x0020_Details') ;
?? Leerzeichen in XML-Dokumente sind entweder wichtig oder nicht. Es ist wichtig, weil es eine tatsächliche Bedeutung ausdrücken kann, wenn es im Inhalt eines Elements oder in einer Kommentaranweisung dargestellt wird. Zum Beispiel die folgende Situation:
??<MyNode xml:space='preserve'>
??<!-- Hier muss jeder Platz erhalten bleiben - ->
??•••
??</MyNode>
??In XML stellen Leerzeichen nicht nur Leerzeichen (Leerstellen) dar, sondern auch Wagenrückläufe und Zeilenumbrüche und Einrückungen.
??Sie können Leerzeichen über die WhiteSpaceHandling-Eigenschaft der XmlTextReader-Klasse verarbeiten. Diese Eigenschaft empfängt einen WhiteSpaceHandling-Enumerationswert und gibt ihn zurück (diese Enumerationsklasse verfügt über drei optionale Werte). Der Standardwert ist „Alle“, was bedeutet, dass sowohl bedeutungsvolle als auch bedeutungslose Leerzeichen als Knoten zurückgegeben werden – unterschieden in SignificantWhitespace- und Whitespace-Knoten. Ein weiterer Enumerationswert ist None, was bedeutet, dass keine Leerzeichen als Knoten zurückgegeben werden. Schließlich gibt es noch den Signficant-Aufzählungswert, der bedeutungslose Leerzeichen ignoriert und nur Knoten zurückgibt, deren Knotentyp SignficantWhitespace ist. Beachten Sie, dass die WhiteSpaceHandling-Eigenschaft eine der wenigen Browsereigenschaften ist. Sie kann jederzeit geändert werden und Auswirkungen auf den Lesevorgang haben. Die Attribute Normalization und XmlResolver sind „Sensibel“.
Das Obige ist der Inhalt der einfachen Verarbeitung von XML-Daten (2-1) in .NET Framework. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php). cn)!