Gewusst wie: Qualifizieren von XML-Element- und XML-Attributnamen
In Instanzen der XmlSerializerNamespaces-Klasse enthaltene XML-Namespaces müssen der Spezifikation Namespaces in XML des World Wide Web Consortium (W3C) entsprechen.
XML-Namespaces stellen eine Methode zur Qualifizierung der Namen von XML-Elementen und XML-Attributen in XML-Dokumenten bereit. Ein qualifizierter Name besteht aus einem Präfix und einem lokalen Namen, die durch einen Doppelpunkt voneinander getrennt sind. Das Präfix wird nur als Platzhalter verwendet und ist einem URI zugeordnet, der den Namespace angibt. Die Kombination aus dem global verwalteten URI-Namespace und dem lokalen Namen bildet einen weltweit garantiert eindeutigen Namen.
Sie können die in einem XML-Dokument verwendeten Präfixe festlegen, indem Sie eine Instanz von XmlSerializerNamespaces
erstellen und die Namespacepaare dem Objekt hinzufügen.
So erstellen Sie qualifizierte Namen in einem XML-Dokument
Erstellen Sie eine Instanz der
XmlSerializerNamespaces
-Klasse.Fügen Sie alle Präfixe und Namespacepaare zu
XmlSerializerNamespaces
hinzu.Wenden Sie das geeignete
System.Xml.Serialization
-Attribut auf jeden Member oder jede Klasse an, die von XmlSerializer in ein XML-Dokument serialisiert werden soll.Folgende Attribute sind verfügbar: XmlAnyElementAttribute, XmlArrayAttribute, XmlArrayItemAttribute, XmlAttributeAttribute, XmlElementAttribute, XmlRootAttribute und XmlTypeAttribute.
Legen Sie die
Namespace
-Eigenschaft jedes Attributs auf einen der Namespacewerte aus demXmlSerializerNamespaces
-Objekt fest.Übergeben Sie
XmlSerializerNamespaces
an dieSerialize
-Methode vonXmlSerializer
.
Beispiel
Im folgenden Beispiel wird ein XmlSerializerNamespaces
-Objekt erstellt, dem zwei Paare aus Präfix und Namespace hinzugefügt werden. Durch den Code wird ein XmlSerializer
-Objekt erstellt, das verwendet wird, um eine Instanz der Books
-Klasse zu serialisieren. Im Code wird die Serialize
-Methode mit XmlSerializerNamespaces
aufgerufen. Der XML-Stream kann daher Namespaces mit Präfixen enthalten.
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
Public Module Program
Public Sub Main()
SerializeObject("XmlNamespaces.xml")
End Sub
Public Sub SerializeObject(filename As String)
Dim mySerializer As New XmlSerializer(GetType(Books))
' Writing a file requires a TextWriter.
Dim myWriter As New StreamWriter(filename)
' Creates an XmlSerializerNamespaces and adds two
' prefix-namespace pairs.
Dim myNamespaces As New XmlSerializerNamespaces()
myNamespaces.Add("books", "http://www.cpandl.com")
myNamespaces.Add("money", "http://www.cohowinery.com")
' Creates a Book.
Dim myBook As New Book()
myBook.TITLE = "A Book Title"
Dim myPrice As New Price()
myPrice.price = CDec(9.95)
myPrice.currency = "US Dollar"
myBook.PRICE = myPrice
Dim myBooks As New Books()
myBooks.Book = myBook
mySerializer.Serialize(myWriter, myBooks, myNamespaces)
myWriter.Close()
End Sub
End Module
Public Class Books
<XmlElement([Namespace] := "http://www.cohowinery.com")> _
Public Book As Book
End Class
<XmlType([Namespace] := "http://www.cpandl.com")> _
Public Class Book
<XmlElement([Namespace] := "http://www.cpandl.com")> _
Public TITLE As String
<XmlElement([Namespace] := "http://www.cohowinery.com")> _
Public PRICE As Price
End Class
Public Class Price
<XmlAttribute([Namespace] := "http://www.cpandl.com")> _
Public currency As String
<XmlElement([Namespace] := "http://www.cohowinery.com")> _
Public price As Decimal
End Class
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
public class Program
{
public static void Main()
{
SerializeObject("XmlNamespaces.xml");
}
public static void SerializeObject(string filename)
{
var mySerializer = new XmlSerializer(typeof(Books));
// Writing a file requires a TextWriter.
TextWriter myWriter = new StreamWriter(filename);
// Creates an XmlSerializerNamespaces and adds two
// prefix-namespace pairs.
var myNamespaces = new XmlSerializerNamespaces();
myNamespaces.Add("books", "http://www.cpandl.com");
myNamespaces.Add("money", "http://www.cohowinery.com");
// Creates a Book.
var myBook = new Book();
myBook.TITLE = "A Book Title";
var myPrice = new Price();
myPrice.price = (decimal) 9.95;
myPrice.currency = "US Dollar";
myBook.PRICE = myPrice;
var myBooks = new Books();
myBooks.Book = myBook;
mySerializer.Serialize(myWriter, myBooks, myNamespaces);
myWriter.Close();
}
}
public class Books
{
[XmlElement(Namespace = "http://www.cohowinery.com")]
public Book Book;
}
[XmlType(Namespace ="http://www.cpandl.com")]
public class Book
{
[XmlElement(Namespace = "http://www.cpandl.com")]
public string TITLE;
[XmlElement(Namespace ="http://www.cohowinery.com")]
public Price PRICE;
}
public class Price
{
[XmlAttribute(Namespace = "http://www.cpandl.com")]
public string currency;
[XmlElement(Namespace = "http://www.cohowinery.com")]
public decimal price;
}
Siehe auch
- XmlSerializer
- Das XML Schema Definition-Tool und die XML-Serialisierung
- Einführung in die XML-Serialisierung
- XmlSerializer-Klasse
- Attribute zur Steuerung der XML-Serialisierung
- How to: Angeben eines alternativen Elementnamens für einen XML-Stream.
- How to: Serialisieren eines Objekts.
- How to: Deserialisieren eines Objekts
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für