2013-02-12 17 views
9

Denedim:XDocument için bir xmlns nasıl belirlenir?

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

Ama olsun: (buldum bir cevap uygun)

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

Ben de ikame çalıştı:

XAttribute(XNamespace.Xmlns,... 

Ama aynı zamanda bir hata var.

Not Not: Bu belgede birden fazla xmlns bulundurmaya çalışmıyorum.

+2

Belki bu sizin için çalışır: http://stackoverflow.com/a/2874572/1373170 –

cevap

20

XDocument API'sinin ad alanı kapsamı adları ile çalışma şekli XName örnekleridir. Bir XML adının sadece bir dize değil, kapsamlı bir tanımlayıcı olduğunu kabul ettiğiniz sürece, bunların kullanımı oldukça kolaydır. İşte bunun için gereken adımları:

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

Sonuç: + operatör XNamespace ve String ve XName örneğini sonuçlanması kabul etmek aşırı yüklü

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

Not.

+1

Teşekkürler. Bir isim alanını sadece bir kez eklemenin bir _simple_ yolu olmayacağı garip görünüyor. – ispiro

+1

Evet, bence bu oldukça basit ve gerçekten de eviniz, yaptığınız şeyin sadece dizeleri değil, ad alan adları oluşturmasıdır. Ad alanları için daha az kod istiyorsanız, 'System.Xml.XmlDocument 'sınıfı kök ad alanının kaydını tutmak için bir Ad Alanı yöneticisi kullanır ve siz doğru kurulum yaptıktan sonra var olmadığı gibi davranabilirsiniz. – codekaizen

+0

Bir sonraki soruma bakın: http://stackoverflow.com/questions/14841517/how-can-i-add-innerxml-without-it-being-modified-in-any-way - XmlDocument'i deniyorum iyi ve yardım etmiyor. – ispiro