2009-01-14 35 views
10

Chúng tôi đã đưa ra một tài liệu mẫu và cần có khả năng tái tạo cấu trúc của tài liệu chính xác cho một nhà cung cấp. Tuy nhiên, tôi là một chút bị mất với cách C# xử lý không gian tên. Dưới đây là một mẫu của các tài liệu:Tạo một tài liệu XML cụ thể bằng cách sử dụng các không gian tên trong C#

<?xml version="1.0" encoding="UTF-8"?> 
<Doc1 xmlns="http://www.sample.com/file" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.sample.com/file/long/path.xsd"> 
    <header> 
     <stuff>data</stuff> 
     <morestuff>data</morestuff> 
    </header> 
</Doc1> 

Làm thế nào tôi thường muốn đi về việc này là để tải một tài liệu trống, và sau đó bắt đầu Populating nó:

XmlDocument doc = new XmlDocument(); 
doc.LoadXml("<Doc1></Doc1>"); 
// Add nodes here with insert, etc... 

Khi tôi nhận được tài liệu bắt đầu, làm thế nào thế nào để tôi nhận được không gian tên và lược đồ vào phần tử Doc1? Nếu tôi bắt đầu với không gian tên và lược đồ trong phần tử Doc1 bằng cách bao gồm chúng trong LoadXml(), thì tất cả của các phần tử con có không gian tên trên chúng - và đó là không có. Tài liệu bị từ chối.

Nói cách khác, tôi phải tạo ra CHÍNH XÁC như được hiển thị. (Và tôi không thích viết text-to-a-file trong C# và hy vọng nó là XML hợp lệ).

Trả lời

20

Bạn nên thử nó như vậy

XmlDocument doc = new XmlDocument(); 

    XmlSchema schema = new XmlSchema(); 
    schema.Namespaces.Add("xmlns", "http://www.sample.com/file"); 

    doc.Schemas.Add(schema); 

Đừng quên để bao gồm các không gian tên sau đây:

using System.Xml.Schema; 
using System.Xml; 
+2

+1 để xác định những điều khoản sử dụng để các đoạn mã thực sự hoạt động! –

0

Nếu bạn đang sử dụng Visual Studio 2008 trong Mẫu thư mục mà bạn sẽ tìm thấy một mẫu addin cho phép bạn dán một đoạn XML dưới dạng mã Linq2XML.

Scott Hanselman có chi tiết blog post.

Tôi nghĩ đây là cách nhanh nhất để chuyển từ tài liệu XML mẫu sang mã C# tạo mã đó.

+0

Không có .Net 3.0+ tại đây. Vẫn 2.0. –

4

Cá nhân tôi thích sử dụng XmlElement chung và các thuộc tính của nó để khai báo các không gian tên. Tôi biết có những cách tốt hơn, nhưng điều này không bao giờ thất bại.

Hãy thử một cái gì đó như thế này:

xRootElement.SetAttribute("xmlns:xsi", "http://example.com/xmlns1"); 
+0

xRootElement là gì ?? – Shrivallabh

+0

một phiên bản XmlElement :) – mathifonseca

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