Assembly: System.Xml (in system.xml.dll)
<AttributeUsageAttribute(AttributeTargets.Property Or AttributeTargets.Field Or AttributeTargets.Parameter Or AttributeTargets.ReturnValue, AllowMultiple:=True)> _ Public Class XmlAnyElementAttribute Inherits Attribute
Dim instance As XmlAnyElementAttribute
[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, AllowMultiple=true)] public class XmlAnyElementAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Property|AttributeTargets::Field|AttributeTargets::Parameter|AttributeTargets::ReturnValue, AllowMultiple=true)] public ref class XmlAnyElementAttribute : public Attribute
/** @attribute AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, AllowMultiple=true) */ public class XmlAnyElementAttribute extends Attribute
AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, AllowMultiple=true) public class XmlAnyElementAttribute extends Attribute
Utilizzare XmlAnyElementAttribute per contenere dati arbitrari, ad esempio elementi XML, che possono essere inviati all'interno di un documento XML, come nel caso di metadati in un documento.
Applicare la classe XmlAnyElementAttribute a un campo che restituisce una matrice di oggetti XmlElement o XmlNode. Esistono due modi per utilizzare un campo di questo tipo, a seconda che si debba serializzare o deserializzare un oggetto. In caso di serializzazione, l'oggetto viene generato come elemento o nodo XML, anche se privo di membri corrispondenti nell'oggetto da serializzare. Se si specifica un valore della proprietà Name al momento dell'applicazione dell'attributo, tutti gli oggetti XmlElement o XmlNode inseriti nella matrice devono disporre dello stesso nome di elemento e spazio dei nomi predefinito. In caso contrario, verrà generata un'eccezione. Se si imposta il valore della proprietà Namespace, è necessario impostare anche la proprietà Name, assicurandosi che anche l'oggetto XmlElement o XmlNode abbia gli stessi valori di nome e spazio dei nomi. Se non si specifica alcun valore Name, all'oggetto XmlElement o XmlNode può essere assegnato qualsiasi nome di elemento.
Quando viene chiamato il metodo Deserialize della classe XmlSerializer, tutti gli elementi privi di membro corrispondente nell'oggetto da deserializzare vengono raccolti nella matrice. Dopo la deserializzazione è possibile scorrere l'insieme di elementi XmlElement per elaborare i dati. Se si specifica un valore di Name, la matrice conterrà soltanto elementi XML con tale nome. Se non si specifica un valore di Name, la matrice conterrà tutti gli elementi che non dispongono di un membro corrispondente nella classe. Se una classe contiene più campi ai quali è applicato l'attributo, utilizzare le proprietà Name o Name e Namespace per differenziare il contenuto delle matrici. Se una classe con più campi contiene inoltre un campo per il quale non sono stati impostati valori di proprietà distintivi, ovvero Name e Namespace, durante la deserializzazione, questa matrice conterrà tutti gli elementi XML sconosciuti che non sono già presenti nelle altre matrici. Se una classe contiene più campi per i quali non sono stati impostati i valori distintivi Name o Name e Namespace, il comportamento durante la deserializzazione non è specificato.
È inoltre possibile applicare la classe XmlAnyElementAttribute a un campo che restituisce un unico oggetto XmlElement. In tal caso, è necessario utilizzare le proprietà e i metodi della classe XmlElement per scorrere in modo ricorsivo gli elementi sconosciuti.
È possibile applicare istanze multiple della classe XmlAnyElementAttribute a un membro di classe ma a ogni istanza deve essere assegnato un diverso valore della proprietà Name. In alternativa, se tutte le istanze hanno in comune la stessa proprietà Name, in ognuna di esse deve essere impostato un diverso valore della proprietà Namespace.
Gli eventi UnknownNode e UnknownAttribute della classe XmlSerializer non si verificano se a un membro di una classe viene applicato XmlAnyElementAttribute.
Nota |
|---|
| Nel codice è possibile utilizzare la parola XmlAnyElement anziché la forma più estesa XmlAnyElementAttribute. |
Per ulteriori informazioni sull'utilizzo degli attributi, vedere Estensione di metadati mediante attributi.
Nell'esempio seguente la classe XmlAnyElementAttribute viene applicata al campo AllElements che restituisce una matrice di oggetti XmlElement.
Public Class XClass ' Apply the XmlAnyElementAttribute to a field returning an array ' of XmlElement objects. <XmlAnyElement()> Public AllElements() As XmlElement End Class 'XClass Public Class Test Public Shared Sub Main() Dim t As New Test() t.DeserializeObject("XFile.xml") End Sub 'Main Private Sub DeserializeObject(filename As String) ' Create an XmlSerializer. Dim mySerializer As New XmlSerializer(GetType(XClass)) ' To read a file, a FileStream is needed. Dim fs As New FileStream(filename, FileMode.Open) ' Deserialize the class. Dim x As XClass = CType(mySerializer.Deserialize(fs), XClass) ' Read the element names and values. Dim xel As XmlElement For Each xel In x.AllElements Console.WriteLine((xel.LocalName & ": " & xel.Value)) Next xel End Sub 'DeserializeObject End Class 'Test
public class XClass { /* Apply the XmlAnyElementAttribute to a field returning an array of XmlElement objects. */ [XmlAnyElement] public XmlElement[] AllElements; } public class Test { public static void Main() { Test t = new Test(); t.DeserializeObject("XFile.xml"); } private void DeserializeObject(string filename) { // Create an XmlSerializer. XmlSerializer mySerializer = new XmlSerializer(typeof(XClass)); // To read a file, a FileStream is needed. FileStream fs = new FileStream(filename, FileMode.Open); // Deserialize the class. XClass x = (XClass) mySerializer.Deserialize(fs); // Read the element names and values. foreach(XmlElement xel in x.AllElements) Console.WriteLine(xel.LocalName + ": " + xel.Value); } }
public ref class XClass { public: /* Apply the XmlAnyElementAttribute to a field returning an array of XmlElement objects. */ [XmlAnyElement] array<XmlElement^>^AllElements; }; public ref class Test { public: void DeserializeObject( String^ filename ) { // Create an XmlSerializer. XmlSerializer^ mySerializer = gcnew XmlSerializer( XClass::typeid ); // To read a file, a FileStream is needed. FileStream^ fs = gcnew FileStream( filename,FileMode::Open ); // Deserialize the class. XClass^ x = dynamic_cast<XClass^>(mySerializer->Deserialize( fs )); // Read the element names and values. System::Collections::IEnumerator^ myEnum = x->AllElements->GetEnumerator(); while ( myEnum->MoveNext() ) { XmlElement^ xel = safe_cast<XmlElement^>(myEnum->Current); Console::WriteLine( "{0}: {1}", xel->LocalName, xel->Value ); } } }; int main() { Test^ t = gcnew Test; t->DeserializeObject( "XFile.xml" ); }
public class XClass
{
/* Apply the XmlAnyElementAttribute to a field returning an array
of XmlElement objects.
*/
/** @attribute XmlAnyElement()
*/
public XmlElement allElements[];
} //XClass
public class Test
{
public static void main(String[] args)
{
Test t = new Test();
t.DeserializeObject("XFile.xml");
} //main
private void DeserializeObject(String fileName)
{
// Create an XmlSerializer.
XmlSerializer mySerializer = new XmlSerializer(XClass.class.ToType());
// To read a file, a FileStream is needed.
FileStream fs = new FileStream(fileName, FileMode.Open);
// Deserialize the class.
XClass x = (XClass)mySerializer.Deserialize(fs);
// Read the element names and values.
for (int iCtr = 0; iCtr < x.allElements.length; iCtr++) {
XmlElement xel = (XmlElement)x.allElements.get_Item(iCtr);
Console.WriteLine(xel.get_LocalName() + ": " + xel.get_Value());
}
} //DeserializeObject
} //Test
System.Attribute
System.Xml.Serialization.XmlAnyElementAttribute
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile per Pocket PC, Windows Mobile per Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.
Nota