2009-01-14 13 views
10

Dostaliśmy przykładowy dokument i musimy mieć możliwość odtworzenia struktury dokumentu dokładnie dla dostawcy. Jednak jestem trochę zagubiony z tym, jak C# obsługuje przestrzenie nazw. Oto próbka tego dokumentu:Tworzenie określonego dokumentu XML z wykorzystaniem przestrzeni nazw w 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> 

Jak bym zwykle go o to, aby załadować pusty dokument, a następnie rozpocząć wypełnianie go:

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

Raz dostać dokument zaczął, jak jaki sposób uzyskać przestrzeń nazw i schemat w elemencie Doc1? Jeśli zaczynam od przestrzeni nazw i schematu w elemencie Doc1, włączając je do LoadXml(), to wszystkieelementów potomnych mają na nich obszar nazw - i to nie jest nie. Dokument został odrzucony.

Innymi słowy, muszę go wykonać DOKŁADNIE jak pokazano. (I wolałbym nie pisać tekst-do-pliku w C# i mam nadzieję, że jest to poprawny XML).

Odpowiedz

20

powinieneś spróbować w ten sposób

XmlDocument doc = new XmlDocument(); 

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

    doc.Schemas.Add(schema); 

Nie zapomnij podać następujące przestrzenie nazw:

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

+1 dla określając przy użyciu instrukcji tak, że fragment kodu faktycznie działa! –

0

Jeśli używasz Visual Studio 2008 w folderze Samples znajdziesz próbkę addin, wklejmy fragment XML jako kod Linq2XML.

Scott Hanselman ma blog post ze szczegółami.

Myślę, że jest to najszybszy sposób, aby przejść z przykładowego dokumentu XML do kodu C#, który go tworzy.

+0

Nie .Net 3.0+ jeszcze tutaj. Nadal 2.0. –

4

Ja osobiście wolę używać wspólnego XmlElement i jego atrybutów do deklarowania przestrzeni nazw. Wiem, że są lepsze sposoby, ale ten nigdy nie zawodzi.

spróbować czegoś takiego:

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

Co to jest xRootElement ?? – Shrivallabh

+0

instancja XmlElement :) – mathifonseca

Powiązane problemy