Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Sono disponibili diversi modi per gestire i prefissi dello spazio dei nomi per un attributo con XmlTextWriter: WriteAttributes, WriteAttributeString, e WriteStartAttribute.
WriteAttributes
Se la posizione corrente è un nodo di elemento, il metodo WriteAttributes scrive in XmlReader tutti gli attributi presenti nella posizione corrente. Se la posizione corrente è impostata in corrispondenza di un attributo, vengono restituiti l'attributo e tutti gli attributi rimanenti nell'elemento. Se la posizione è impostata in corrispondenza di un tipo di nodo XmlDeclaration, vengono riportati tutti gli attributi della dichiarazione. Tutti gli altri tipi di nodo non eseguono alcuna operazione. Se XmlReader ha un prefisso dello spazio dei nomi dichiarato, oltre agli attributi, il metodo WriteAttributes scriverà anche il prefisso dello spazio dei nomi. Nell'esempio di codice seguente viene illustrato come il metodo WriteAttributes scrive il prefisso dello spazio dei nomi con l'attributo.
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();
Output
<ROOT p:a="abc" xmlns:p="n" />
WriteAttributeString
Un altro modo per gestire i prefissi in uno spazio dei nomi consiste nel fare in modo che l'applicazione utilizzi uno dei metodi WriteAttributeString che accettano uno spazio dei nomi come prefisso. Uno dei metodi WriteAttributeString accetta, come argomenti, un nome di attributo, un valore di attributo e uno spazio dei nomi e riporta l'attributo con il valore specificato, associandolo allo spazio dei nomi.
Un altro metodo WriteAttributeString utilizza un prefisso dello spazio dei nomi definito dall'utente e associa l'attributo al prefisso quando scrive l'attributo. Per il codice di esempio in cui viene illustrato l'utilizzo del metodo WriteAttributeString e di un prefisso dello spazio dei nomi definito dall'utente, vedere WriteAttributeString.
WriteStartAttribute
WriteStartAttribute genera l'inizio di un attributo e, inoltre, accetta come parametro un prefisso o un URI dello spazio dei nomi a seconda del metodo utilizzato.
Nell'esempio di codice seguente il primo argomento di input è una stringa che accetta il prefisso dello spazio dei nomi bk, individuato chiamando il metodo LookupPrefix. Dopo aver impostato il prefisso, il nome locale e lo spazio dei nomi con WriteStartAttribute, il metodo WriteString fornisce un valore all'attributo.
' 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();
Output
<bookstore xmlns:bk="urn:samples">
<book bk:ISBN="1-861003-78">
<bk:style>hardcover</bk:style>
</book>
</bookstore>
Se gli attributi sono associati a un URI dello spazio dei nomi, l'attributo deve inoltre disporre di un prefisso, come specificato nella sezione Namespace Defaulting della raccomandazione W3C (World Wide Web Consortium) Namespaces in XML (informazioni in lingua inglese). Nell'esempio di codice seguente viene illustrato che è necessario includere il prefisso quando si scrive un attributo con il metodo WriteAttributeString.
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();
Output
<root n1:order="123" xmlns:n1="urn:1"/>
Questo output si verifica anche se l'elemento root è associato allo spazio dei nomi predefinito urn:1. I prefissi sono denominati n{i} dove i inizia da 1. L'indice inizia di nuovo da 1 per ciascun elemento. Per questo motivo, se per un elemento figlio annidato è necessario un prefisso generato, verrà utilizzato n1.
Nell'esempio di codice seguente viene illustrato che, quando si scrivono più attributi con spazi dei nomi diversi, gli attributi sono scritti prima delle dichiarazioni dello spazio dei nomi.
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();
Output
<root n1:order="123" n2:book="The Great Escape" xmlns:n1="urn:1" xmlns:n2="urn:2"/>