2013-07-02 20 views
6

muszę być w stanie utworzyć dokument XML, który wygląda tak:Jak mogę dodać atrybuty xml z różnymi przedrostkami/przestrzeniami nazw w 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> 

Oto mój kod:

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); 

Niestety, co dostaję do drugiego atrybutu z drugim prefiksu w ogóle nie jest prefiksem. To tylko "attrTwo" - podobnie jak atrybut schemaVersion.

Czy istnieje sposób na różne prefiksy dla atrybutów w elemencie głównym w C#?

Odpowiedz

2

To jest tylko przewodnik dla ciebie. Może można zrobić:

 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"); 

To spowoduje:

 <?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" /> 

nadzieję, że będzie żadnej pomocy!

+0

Warto zauważyć, że NameTable i AddNamespace jest potrzebne tylko wtedy, gdy trzeba ustalić skrót przestrzeni nazw, a następnie domyślną konwencję nazewnictwa (d1p1, d1p2, ...) –

0

Widziałem a post on another question, które zakończyło się rozwiązaniem problemu. Zasadniczo właśnie stworzyłem ciąg znaków, który zawierał cały xml, a następnie użyłem metody LoadXml na instancji 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); 
Powiązane problemy