Freigeben über


Präfixe des Attribute-Namespaces im "XmlTextWriter"

Es gibt mehrere Methoden, Namespacepräfixe für ein Attribut mit dem XmlTextWriter zu behandeln: WriteAttributes, WriteAttributeString und WriteStartAttribute.

WriteAttributes

Wenn die aktuelle Position ein Elementknoten ist, schreibt die WriteAttributes-Methode alle Attribute, die sich an der aktuellen Position befinden, in den XmlReader. Wenn die aktuelle Position an einem Attribut festgelegt ist, werden das Attribut und alle verbleibenden Attribute im Element zurückgegeben. Wenn die Position an einem XmlDeclaration-NodeType festgelegt ist, werden alle Attribute der Deklaration geschrieben. Bei allen anderen NodeTypes wird kein Vorgang ausgeführt. Wenn für den XmlReader ein Namespacepräfix deklariert wurde, schreibt die WriteAttributes-Methode zusätzlich zu den Attributen das Namespacepräfix. Im folgenden Codebeispiel wird veranschaulicht, wie die WriteAttributes-Methode das Namespacepräfix mit dem Attribut schreibt.

Dim r As XmlTextReader = CreateTextReaderStr("<ROOT xmlns:p='n' p:a='abc'/>")
r.Read()
r.MoveToAttribute("p:a")

Dim tw As New XmlTextWriter(Console.Out)
tw.WriteStartElement("ROOT")
tw.WriteAttributes(r, False)
tw.WriteEndElement()
XmlTextReader r = CreateTextReaderStr("<ROOT xmlns:p='n' p:a='abc'/>");
r.Read();
r.MoveToAttribute("p:a");

XmlTextWriter tw = new XmlTextWriter(Console.Out);
tw.WriteStartElement("ROOT");
tw.WriteAttributes(r, false);
tw.WriteEndElement();

Ausgabe

<ROOT p:a="abc" xmlns:p="n" />

WriteAttributeString

Eine weitere Möglichkeit, Präfixe zu behandeln, besteht in der Verwendung der WriteAttributeString-Methode, die einen Namespace als Präfix annimmt. Eine der WriteAttributeString-Methoden liest als Argumente einen Attributnamen, einen Attributwert und einen Namespace ein, und schreibt das Attribut mit dem gegebenen Wert und verknüpft es mit dem Namespace.

Eine andere WriteAttributeString-Methode verwendet ein benutzerdefiniertes Namespacepräfix und verknüpft beim Schreiben des Attributs das Attribut mit diesem Präfix. Beispielcode für die Verwendung der WriteAttributeString-Methode und eines benutzerdefinierten Namespacepräfixes finden Sie unter WriteAttributeString.

WriteStartAttribute

Das WriteStartAttribute generiert den Start eines Attributs und liest je nach verwendeter Methode außerdem ein Namespacepräfix oder einen Namespace-URI (Uniform Resource Identifier) als Parameter ein.

Im folgenden Codebeispiel ist das erste Eingabeargument eine Zeichenfolge, die das Namespacepräfix bk verwendet, das durch Aufrufen der LookupPrefix-Methode abgerufen wird. Nachdem mit dem WriteStartAttribute das Präfix, der lokale Name und der Namespace festgelegt wurden, übergibt die WriteString-Methode einen Wert an das Attribut.

' Write an element (this one is the root).
writer.WriteStartElement("bookstore")
' Write the namespace declaration.
writer.WriteAttributeString("xmlns", "bk", Nothing, "urn:samples")
writer.WriteStartElement("book")
' Look up the prefix, and then write the ISBN attribute.
Dim prefix As String = writer.LookupPrefix("urn:samples")
writer.WriteStartAttribute(prefix, "ISBN", "urn:samples")
writer.WriteString("1-861003-78")
writer.WriteEndAttribute()
' Write the style element.
writer.WriteStartElement(prefix, "style", "urn:samples")
writer.WriteString("hardcover")
writer.WriteEndElement()
' Write the end tag for the book element.
writer.WriteEndElement()
'Write the close tag for the root element.
writer.WriteEndElement()
                
// Write an element (this one is the root).
writer.WriteStartElement("bookstore");   
// Write the namespace declaration.
writer.WriteAttributeString("xmlns", "bk", null, "urn:samples");
writer.WriteStartElement("book");
// Look up the prefix, and then write the ISBN attribute.
string prefix = writer.LookupPrefix("urn:samples");
writer.WriteStartAttribute(prefix, "ISBN", "urn:samples");
writer.WriteString("1-861003-78");
writer.WriteEndAttribute();
// Write the style element.
writer.WriteStartElement(prefix, "style", "urn:samples");
writer.WriteString("hardcover");
writer.WriteEndElement();
// Write the end tag for the book element.
writer.WriteEndElement();
// Write the close tag for the root element.
writer.WriteEndElement();

Ausgabe

<bookstore xmlns:bk="urn:samples">
  <book bk:ISBN="1-861003-78">
      <bk:style>hardcover</bk:style>
  </book>
</bookstore>

Wenn ein Attribut einen zugehörigen Namespace-URI aufweist, muss es gemäß der W3C-Empfehlung (World Wide Web Consortium) für XML-Namespaces "Namespace Defaulting" auch ein Präfix besitzen. Im folgenden Codebeispiel wird veranschaulicht, dass beim Schreiben eines Attributs mit der WriteAttributeString-Methode das Präfix angegeben werden muss.

Dim w As New XmlTextWriter(Console.Out)
w.WriteStartElement("root")
w.WriteAttributeString("order", "urn:1", "123")
w.WriteEndElement()
w.Close()
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("root");
w.WriteAttributeString("order","urn:1", "123");
w.WriteEndElement();
w.Close();

Ausgabe

<root n1:order="123" xmlns:n1="urn:1"/>

Diese Ausgabe wird auch dann generiert, wenn das root-Element dem Standardnamespace urn:1 zugeordnet wird. Die Präfixe werden n{i} benannt, wobei i bei 1 beginnt. Der Index beginnt bei jedem Element erneut bei 1. Wenn ein geschachteltes untergeordnetes Element ebenfalls ein generiertes Präfix erfordert, wird daher n1 verwendet.

Im folgenden Codebeispiel wird veranschaulicht, dass beim Schreiben mehrerer Attribute mit unterschiedlichen Namespaces vor den Namespacedeklarationen Attribute geschrieben werden.

Dim w As New XmlTextWriter(Console.Out)
w.WriteStartElement("root")
w.WriteAttributeString("order", "urn:1", "123")
w.WriteAttributeString("book", "urn:2", "The Great Escape")
w.WriteEndElement()
w.Close()
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("root");
w.WriteAttributeString("order","urn:1", "123");
w.WriteAttributeString("book","urn:2", "The Great Escape");
w.WriteEndElement();
w.Close();

Ausgabe

<root n1:order="123" n2:book="The Great Escape" xmlns:n1="urn:1" xmlns:n2="urn:2"/>

Siehe auch

Referenz

XmlTextWriter

XmlTextWriter

XmlWriter

XmlWriter