C#

2009-01-14 14 views
10

ad alanlarını kullanarak belirli bir XML belgesi oluşturma Örnek bir belge verildi ve belgenin yapısını tam olarak bir satıcı için yeniden üretebilmeleri gerekiyor. Ancak, C# ad alanlarını nasıl işlediğiyle ilgili biraz kayboldum. İşte belgenin bir örneği verilmiştir: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> 

Nasıl bu boş belgeyi yüklemek için yaklaşık genellikle gidin ve sonra dolmaya başlar ediyorum:, nasıl aldıktan sonra

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

belge başladı Ad alanını ve şemayı Doc1 öğesine nasıl alabilirim? LoadXml() 'ye ekleyerek, Doc1 öğesindeki ad alanı ve şema ile başlarsanız, alt öğelerin tümünün numaralı ad alanı onlara sahip olur - ve bu bir no-no'dur. Belge reddedildi. Başka bir deyişle, gösterildiği gibi EXACTLY üretmek zorundayım. (Ve ben sadece C# dosyasına metin-yazmayı değil, aynı zamanda geçerli bir XML olmasını da tercih ederim).

cevap

20

Sen

aşağıdaki ad alanları dahil etmeyi unutmayın bu şekilde

XmlDocument doc = new XmlDocument(); 

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

    doc.Schemas.Add(schema); 
denemelisiniz: Eğer Samples Visual Studio 2008 kullanıyorsanız

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

+1 kod bloğu gerçekten çalışıyor, böylece kullanarak ifadeleri belirtmek için! –

0

Bir örnek bulacaksınız klasörü Bir XML parçasını Linq2XML kodu olarak yapıştırmanıza izin veren eklenti.

Scott Hanselman, ayrıntılarla birlikte bir blog post sahiptir.

Bu, örnek bir XML belgesinden C# kodunu oluşturan en hızlı yoldur.

+0

No .Net 3.0+ henüz burada. Hala 2.0. –

4

Şahsen, ortak XmlElement öğesini ve ad alanlarını bildirme konusundaki özelliklerini kullanmayı tercih ediyorum. Daha iyi yollar olduğunu biliyorum, ama bu asla başarısız olmaz. Böyle

deneyin şey:

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

xRootElement nedir? – Shrivallabh

+0

bir XmlElement örneği :) – mathifonseca