XmlSerializer.UnknownAttribute-Ereignis
Tritt ein, wenn XmlSerializer während der Deserialisierung auf ein XML-Attribut von unbekanntem Typ stößt.
Namespace: System.Xml.Serialization
Assembly: System.Xml (in system.xml.dll)
Syntax
'Declaration
Public Event UnknownAttribute As XmlAttributeEventHandler
'Usage
Dim instance As XmlSerializer
Dim handler As XmlAttributeEventHandler
AddHandler instance.UnknownAttribute, handler
public event XmlAttributeEventHandler UnknownAttribute
public:
event XmlAttributeEventHandler^ UnknownAttribute {
void add (XmlAttributeEventHandler^ value);
void remove (XmlAttributeEventHandler^ value);
}
/** @event */
public void add_UnknownAttribute (XmlAttributeEventHandler value)
/** @event */
public void remove_UnknownAttribute (XmlAttributeEventHandler value)
JScript unterstützt die Verwendung von Ereignissen, aber nicht die Deklaration von neuen Ereignissen.
Hinweise
Standardmäßig ignoriert XmlSerializer nach dem Aufruf der Deserialize-Methode XML-Attribute mit unbekanntem Typ. Sie können dieses Ereignis jedoch zur Behandlung derartiger Knotentypen verwenden.
Wenn die Instanz der deserialisierten Klasse ein Feld enthält, das ein Array aus XmlAttribute-Objekten zurückgibt, und XmlAnyAttributeAttribute auf das Feld angewendet wurde, tritt das UnknownAttribute-Ereignis nicht ein. Stattdessen werden alle unbekannten XML-Attribute im Array erfasst.
Beispiel
Im folgenden Beispiel werden Informationen über alle unbekannten Attribute ausgegeben, die während der Deserialisierung eines XML-Dokuments aufgetreten sind.
Imports System
Imports System.IO
Imports System.Xml.Serialization
Imports System.Xml
Imports System.Xml.Schema
Imports Microsoft.VisualBasic
Public Class Group
Public GroupName As String
End Class
Public Class Test
Shared Sub Main()
Dim t As Test = new Test()
' Deserialize the file containing unknown elements.
t.DeserializeObject("UnknownAttributes.xml")
End Sub
Private Sub Serializer_UnknownAttribute _
(sender As Object , e As XmlAttributeEventArgs)
Console.WriteLine("Unknown Attribute")
Console.WriteLine(ControlChars.Tab & e.Attr.Name + " " & e.Attr.InnerXml)
Console.WriteLine(ControlChars.Tab & e.LineNumber & ":" & e.LineNumber)
Console.WriteLine(ControlChars.Tab & e.LinePosition & ":" & e.LinePosition)
Dim x As Group = CType( e.ObjectBeingDeserialized, Group)
Console.WriteLine (x.GroupName)
Console.WriteLine (sender.ToString())
End Sub
Private Sub DeserializeObject(filename As String)
Dim ser As XmlSerializer = new XmlSerializer(GetType(Group))
' Add a delegate to handle unknown element events.
AddHandler ser.UnknownAttribute, _
AddressOf Serializer_UnknownAttribute
' A FileStream is needed to read the XML document.
Dim fs As FileStream = new FileStream(filename, FileMode.Open)
Dim g As Group = CType(ser.Deserialize(fs),Group)
fs.Close()
End Sub
End Class
using System;
using System.IO;
using System.Xml.Serialization;
using System.Xml;
using System.Xml.Schema;
public class Group{
public string GroupName;
}
public class Test{
static void Main(){
Test t = new Test();
// Deserialize the file containing unknown elements.
t.DeserializeObject("UnknownAttributes.xml");
}
private void Serializer_UnknownAttribute(object sender, XmlAttributeEventArgs e){
Console.WriteLine("Unknown Attribute");
Console.WriteLine("\t" + e.Attr.Name + " " + e.Attr.InnerXml);
Console.WriteLine("\t LineNumber: " + e.LineNumber);
Console.WriteLine("\t LinePosition: " + e.LinePosition);
Group x = (Group) e.ObjectBeingDeserialized;
Console.WriteLine (x.GroupName);
Console.WriteLine (sender.ToString());
}
private void DeserializeObject(string filename){
XmlSerializer ser = new XmlSerializer(typeof(Group));
// Add a delegate to handle unknown element events.
ser.UnknownAttribute+=new XmlAttributeEventHandler(Serializer_UnknownAttribute);
// A FileStream is needed to read the XML document.
FileStream fs = new FileStream(filename, FileMode.Open);
Group g = (Group) ser.Deserialize(fs);
fs.Close();
}
}
#using <System.Xml.dll>
#using <System.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml::Serialization;
using namespace System::Xml;
using namespace System::Xml::Schema;
public ref class Group
{
public:
String^ GroupName;
};
public ref class Test
{
public:
static void main()
{
Test^ t = gcnew Test;
// Deserialize the file containing unknown elements.
t->DeserializeObject( "UnknownAttributes.xml" );
}
private:
void Serializer_UnknownAttribute( Object^ sender, XmlAttributeEventArgs^ e )
{
Console::WriteLine( "Unknown Attribute" );
Console::WriteLine( "\t{0} {1}", e->Attr->Name, e->Attr->InnerXml );
Console::WriteLine( "\t LineNumber: {0}", e->LineNumber );
Console::WriteLine( "\t LinePosition: {0}", e->LinePosition );
Group^ x = dynamic_cast<Group^>(e->ObjectBeingDeserialized);
Console::WriteLine( x->GroupName );
Console::WriteLine( sender );
}
void DeserializeObject( String^ filename )
{
XmlSerializer^ ser = gcnew XmlSerializer( Group::typeid );
// Add a delegate to handle unknown element events.
ser->UnknownAttribute += gcnew XmlAttributeEventHandler( this, &Test::Serializer_UnknownAttribute );
// A FileStream is needed to read the XML document.
FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
Group^ g = dynamic_cast<Group^>(ser->Deserialize( fs ));
fs->Close();
}
};
int main()
{
Test::main();
}
import System.*;
import System.IO.*;
import System.Xml.Serialization.*;
import System.Xml.*;
import System.Xml.Schema.*;
public class Group
{
public String groupName;
} //Group
public class Test
{
public static void main(String[] args)
{
Test t = new Test();
// Deserialize the file containing unknown elements.
t.DeserializeObject("UnknownAttributes.xml");
} //main
private void Serializer_UnknownAttribute(Object sender,
XmlAttributeEventArgs e)
{
Console.WriteLine("Unknown Attribute");
Console.WriteLine("\t" + e.get_Attr().get_Name() + " "
+ e.get_Attr().get_InnerXml());
Console.WriteLine("\t LineNumber: " + e.get_LineNumber());
Console.WriteLine("\t LinePosition: " + e.get_LinePosition());
Group x = (Group)e.get_ObjectBeingDeserialized();
Console.WriteLine(x.groupName);
Console.WriteLine(sender.ToString());
} //Serializer_UnknownAttribute
private void DeserializeObject(String filename)
{
XmlSerializer ser = new XmlSerializer(Group.class.ToType());
// Add a delegate to handle unknown element events.
ser.add_UnknownAttribute(new XmlAttributeEventHandler
(Serializer_UnknownAttribute));
// A FileStream is needed to read the XML document.
FileStream fs = new FileStream(filename, FileMode.Open);
Group g = (Group)ser.Deserialize(fs);
fs.Close();
} //DeserializeObject
} //Test
Plattformen
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 2.0
Siehe auch
Referenz
XmlSerializer-Klasse
XmlSerializer-Member
System.Xml.Serialization-Namespace
XmlAnyAttributeAttribute-Klasse
CanDeserialize
Deserialize
UnknownNode
XmlAttributes-Klasse
Weitere Ressourcen
Einführung in die XML-Serialisierung
Gewusst wie: Angeben eines alternativen Elementnamens für einen XML-Stream
Steuern der XML-Serialisierung mit Attributen
Beispiele für die XML-Serialisierung
XML Schema Definition-Tool (Xsd.exe)