2010-02-12 9 views
5

Devo essere in grado di definire un attributo con un prefisso in un elemento xml.Come creare attributi XmlElement con prefisso?

Per esempio ...

<nc:Person s:id="ID_Person_01"></nc:Person> 

Per fare questo ho pensato che il seguente avrebbe funzionato.

XmlElement TempElement = XmlDocToRef.CreateElement("nc:Person", "http://niem.gov/niem/niem-core/2.0"); 
TempElement.SetAttribute("s:id", "http://niem.gov/niem/structures/2.0", "ID_Person_01"); 

Purtroppo, XmlElement.SetAttribute (string, string, string) non sembra supportare l'analisi del prefisso ricevo l'errore sotto.

Il carattere ':', valore esadecimale 0x3A, non può essere incluso in un nome.

Come definire un attributo con prefisso?

risposta

16

Se hai già dichiarato lo spazio dei nomi nel nodo radice, è sufficiente modificare la chiamata SetAttribute per utilizzare il nome dell'attributo non prefisso. Così, se il nodo principale definisce uno spazio dei nomi come questo:

<People xmlns:s='http://niem.gov/niem/structures/2.0'> 

Si può fare questo e l'attributo preleverà il prefisso avete già stabilito:

// no prefix on the first argument - it will be rendered as 
// s:id='ID_Person_01' 
TempElement.SetAttribute("id", "http://niem.gov/niem/structures/2.0", "ID_Person_01"); 

Se non avete ancora dichiarato il namespace (e il suo prefisso), il sovraccarico di tre corde XmlDocument.CreateAttribute lo farà per voi:

// Adds the declaration to your root node 
var attribute = xmlDocToRef.CreateAttribute("s", "id", "http://niem.gov/niem/structures/2.0"); 
attribute.InnerText = "ID_Person_01" 
TempElement.SetAttributeNode(attribute); 
+0

questo ha funzionato ho già avuto lo spazio dei nomi nel nodo principale Proprio dovuto rimuovere il prefisso dal primo argomento di Metodo SetAttribute Grazie! – Eddie

+1

Molto utile. Una piccola cosa: c'è un operatore di uguale/assegnazione mancante 'Attributo XmlAttribute = xmlDocToRef'. –

1

provare a creare l'attributo direttamente e aggiungendolo all'elemento:

XmlAttribute attr = XmlDocToRef.CreateAttribute("s", "id", "http://niem.gov/niem/structures/2.0"); 
attr.InnerText = "ID_Person_01"; 
TempElement.Attributes.Append(attr); 
2

Il metodo XMLDocument.CreateAttribute può assumere 3 stringhe: prefisso, LocalName e NamespaceURI specificati. È quindi possibile aggiungere l'attributo all'elemento. Qualcosa di simile potrebbe funzionare per voi:

XmlAttribute newAttribute = XmlDocToRef.CreateAttribute("s", "id", "http://niem.gov/niem/structures/2.0"); 
TempElement.Attributes.Append(newAttribute): 
0

Dal momento che la mia ricerca continuava a portarmi qui, risponderò questo per XElement. Non so se questa soluzione è valida anche per XmlElement, ma si spera che almeno aiuti gli altri usando XElement, che finiscono qui.

Basato su this Ho aggiunto xml:space="preserve" a tutti i nodi di dati in alcuni modelli, prima di cercare e aggiungere il loro contenuto. E 'il codice strano IMO (io preferirei tre parametri come indicato sopra, ma fa il lavoro:..

foreach (XElement lElement in root.Descendants(myTag)) 
{ 
     lElement.Add(new XAttribute(root.GetNamespaceOfPrefix("xml") + "space", "preserve")); 
} 
Problemi correlati