2013-02-12 23 views
9

tôi đã cố gắng:Làm thế nào để chỉ định một xmlns cho 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(); 

Nhưng tôi nhận được:

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

Tôi cũng đã cố gắng thay thế (theo một câu trả lời tôi thấy):

XAttribute(XNamespace.Xmlns,... 

Nhưng có một lỗi là tốt.

Lưu ý: Tôi không cố gắng có nhiều hơn một xmlns trong tài liệu.

+2

Có thể tác phẩm này dành cho bạn: http://stackoverflow.com/a/2874572/1373170 –

Trả lời

20

Cách API XDocument hoạt động với tên có phạm vi không gian tên là XName trường hợp. Đây là khá dễ dàng để làm việc với, miễn là bạn chấp nhận rằng một tên XML không chỉ là một chuỗi, nhưng một định danh phạm vi. Đây là cách tôi làm điều đó:

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

Kết quả:

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

Lưu ý các nhà điều hành + bị quá tải để chấp nhận một XNamespaceString dẫn đến và XName dụ.

+1

Cảm ơn. Có vẻ lạ là sẽ không có cách _simple_ để thêm một không gian tên chỉ một lần. – ispiro

+1

Vâng, tôi nghĩ rằng điều này khá đơn giản, và nó thực sự thúc đẩy nhà rằng những gì bạn đang làm là tạo ra các tên không gian tên, không chỉ là chuỗi. Nếu bạn muốn ít mã hơn cho không gian tên, lớp 'System.Xml.XmlDocument' sử dụng trình quản lý Không gian tên để theo dõi không gian tên gốc và bạn có thể giả vờ như không tồn tại khi bạn thiết lập đúng. – codekaizen

+0

Xem câu hỏi tiếp theo của tôi: http://stackoverflow.com/questions/14841517/how-can-i-add-innerxml-without-it-being-modified-in-any-way - Tôi đang cố gắng 'XmlDocument' là tốt và nó không giúp đỡ. – ispiro