2015-09-17 17 views
5

Tôi có tệp xml với không gian tên mặc định được chỉ định có và không có tiền tố không gian tên. Khi tôi tạo ra xml đầu ra tôi nhận được tất cả các yếu tố xml tiền tố. Có cách nào để thoát khỏi các tiền tố kể từ khi tôi đang sử dụng không gian tên mặc định?Force XDocument không sử dụng tiền tố không gian tên nếu không gian tên cũng được định nghĩa là mặc định

class Program 
{ 
    static void Main(string[] args) 
    { 
     var xml = 
      "<root xmlns='default-namespace' xmlns:key='default-namespace'>" + 
      " <node1></node1>" + 
      " <node2></node2>" + 
      "</root>"; 
     var document = XDocument.Parse(xml); 
     var output = document.ToString(); 
    } 
} 

Sản lượng:

<key:root xmlns="default-namespace" xmlns:key="default-namespace"> 
    <key:node1></key:node1> 
    <key:node2></key:node2> 
</key:root> 

gì tôi mong đợi:

<root xmlns="default-namespace" xmlns:key="default-namespace"> 
    <node1></node1> 
    <node2></node2> 
</root> 

Đáng tiếc là tôi không thể loại bỏ việc kê khai gian tên nhân đôi. Tệp xml thực tế mà tôi đang sử dụng được cung cấp bởi một bên khác và tôi cần thực hiện ít sửa đổi nhất có thể.

+0

Theo quan điểm của tôi đó là một thiếu sót của LINQ to mô hình đối tượng XML tiền tố của tên nút không được lưu trữ và cách serializer phải chọn một tiền tố dựa trên các thuộc tính khai báo không gian tên khi serializing một cây vào một chuỗi XML. Dường như việc thực hiện hiện tại ToString() hoặc Save sử dụng khai báo không gian tên được tìm thấy lần cuối của một không gian tên khi thay đổi thứ tự thành '' kết quả nhưng đó không phải là một cái gì đó để dựa vào rõ ràng. Nếu tiền tố quan trọng, hãy chọn một mô hình cây khác như XmlDocument. –

Trả lời

-2

Bạn có thể sử dụng String.Replace Phương pháp để Nhận Các Format Required XML ...

var xml ="<root xmlns='default-namespace' xmlns:key='default-namespace'>" + 
     " <node1></node1>" + 
     " <node2></node2>" + 
     "</root>"; 
     var document = XDocument.Parse(xml); 

     var output = document.ToString().Replace("key:", string.Empty); 
+0

Đây được coi là một hack. Điều gì xảy ra nếu nút 1 chứa giá trị khóa: something Martijn

Các vấn đề liên quan