2013-07-02 12 views
6

ho bisogno di essere in grado di creare un documento XML che assomiglia a questo:Come posso aggiungere attributi xml con diversi prefissi/namespace in C#?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<rootprefix:rootname 
    noPrefix="attribute with no prefix" 
    firstprefix:attrOne="first atrribute" 
    secondprefix:attrTwo="second atrribute with different prefix"> 

    ...other elements... 

</rootprefix:rootname> 

Ecco il mio codice:

XmlDocument doc = new XmlDocument(); 

XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes"); 
doc.AppendChild(declaration); 

XmlElement root = doc.CreateElement("rootprefix:rootname", nameSpaceURL); 
root.SetAttribute("schemaVersion", "1.0"); 

root.SetAttribute("firstprefix:attrOne", "first attribute"); 
root.SetAttribute("secondprefix:attrTwo", "second attribute with different prefix"); 

doc.AppendChild(root); 

Purtroppo, quello che sto ricevendo per il secondo attributo con il secondo prefisso non ha alcun prefisso. È solo "attrTwo", come l'attributo schemaVersion.

Quindi, c'è un modo per avere prefissi diversi per gli attributi nell'elemento radice in C#?

risposta

2

Questa è solo una guida per voi. Può essere che si può fare:

 NameTable nt = new NameTable(); 
     nt.Add("key"); 

     XmlNamespaceManager ns = new XmlNamespaceManager(nt); 
     ns.AddNamespace("firstprefix", "fp"); 
     ns.AddNamespace("secondprefix", "sp"); 

     root.SetAttribute("attrOne", ns.LookupPrefix("fp"), "first attribute"); 

     root.SetAttribute("attrTwo", ns.LookupPrefix("sp"), "second attribute with different prefix"); 

Questo si tradurrà in:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
     <rootprefix:rootname schemaVersion="1.0" d1p1:attrOne="first attribute" d1p2:attrTwo="second attribute with different prefix" xmlns:d1p2="secondprefix" xmlns:d1p1="firstprefix" xmlns:rootprefix="ns" /> 

Spero che questo sarà di alcun aiuto!

+0

pena notare che l'NameTable e AddNamespace è necessario solo se è necessario determinare la stenografia del namespace piuttosto che la convenzione di denominazione predefinita (d1p1, d1p2, ...) –

0

Ho visto a post on another question che ha risolto il problema. Fondamentalmente ho appena creato una stringa contenente tutti gli xml, quindi ho utilizzato il metodo LoadXml su un'istanza di XmlDocument.

string rootNodeXmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"  
    + "<rootprefix:rootname schemaVersion=\"1.0\" d1p1:attrOne=\"first attribute\"" 
    + "d1p2:attrTwo=\"second attribute with different prefix\" xmlns:d1p2=\"secondprefix\"" 
    + "xmlns:d1p1=\"firstprefix\" xmlns:rootprefix=\"ns\" />"; 
doc.LoadXml(rootNodeXmlString);