2013-02-12 17 views
9

ho provato:Come specificare un xmlns per XDocument?

textBox1.Text = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"), 
    new XElement("root1", new XAttribute("xmlns", @"http://example.com"), new XElement("a", "b")) 
).ToString(); 

ma ottengo:

The prefix '' cannot be redefined from '' to 'http://example.com' within the same start element tag. 

Ho anche provato sostituendo (in base ad una risposta che ho trovato):

XAttribute(XNamespace.Xmlns,... 

ma ho ottenuto un errore pure.

Nota: Non sto cercando di avere più di un xmlns nel documento.

+2

Forse questo lavoro per voi: http://stackoverflow.com/a/2874572/1373170 –

risposta

20

Il modo in cui l'API XDocument funziona con i nomi con lo spazio dei nomi è come istanze XName. Questi sono abbastanza facili da usare, purché si accetti che un nome XML non è solo una stringa, ma un identificatore di ambito. Ecco come lo faccio:

var ns = XNamespace.Get("http://example.com"); 
var doc = new XDocument(new XDeclaration("1.0", "utf-8", null)); 
var root = new XElement(ns + "root1", new XElement(ns + "a", "b")); 
doc.Add(root); 

Risultato:

<root1 xmlns="http://example.com"> 
    <a>b</a> 
</root1> 

nota l'operatore + è sovraccarico di accettare un XNamespace e un String ai risultati e XName esempio.

+1

Grazie. Sembra strano che non ci sia un modo _semplice_ per aggiungere uno spazio dei nomi solo una volta. – ispiro

+1

Beh, penso che sia abbastanza semplice, e fa davvero capire a casa che quello che stai facendo è creare nomi con nomi, non solo stringhe. Se si desidera meno codice per gli spazi dei nomi, la classe 'System.Xml.XmlDocument' utilizza un gestore Namespace per tenere traccia dello spazio dei nomi radice e si può fingere che non esista una volta completata la configurazione. – codekaizen

+0

Vedere la prossima domanda: http://stackoverflow.com/questions/14841517/how-can-i-add-innerxml-without-it-being-modified-in-any-way - Sto provando 'XmlDocument' come bene e non sta aiutando. – ispiro