2009-06-05 16 views
49

Czy istnieje sposób na wydrukowanie XDocument wersji xml przy użyciu metody ToString? Mieć to coś wyjście tak:Jak wydrukować <? Xml version = "1.0"?> Przy użyciu XDocument

<?xml version="1.0"?> 
<!DOCTYPE ELMResponse [ 
]> 
<Response> 
<Error> ...

Mam następujący:

var xdoc = new XDocument(new XDocumentType("Response", null, null, "\n"), ...

który wypisze to co jest w porządku, ale brakuje „< wersję XML?”, Jak podano powyżej.

<!DOCTYPE ELMResponse [ 
]> 
<Response> 
<Error> ...

Wiem, że można to zrobić, wypisując go ręcznie samodzielnie. Chciałem tylko wiedzieć, czy było to możliwe przy użyciu XDocument.

+1

Side: fakt, że XDocument.ToString() pomija XDeclaration oznacza również, że nie będzie widać deklarację w oknie obserwacyjnym debugera VS, nawet jeśli XDeclaration znajduje się w XDocument. – dthorpe

Odpowiedz

94

Korzystając XDeclaration. To doda deklarację.

Ale dzięki ToString nie uzyskasz pożądanego wyniku.

Musisz użyć XDocument.Save() z jedną z jego metod.

Pełna próbka:

var doc = new XDocument(
      new XDeclaration("1.0", "utf-16", "yes"), 
      new XElement("blah", "blih")); 

    var wr = new StringWriter(); 
    doc.Save(wr); 
    Console.Write(wr.ToString()); 
+2

Tak, masz rację, tęskniłem za częścią, kiedy powiedział, że używa ToString(). Tak więc użyj XDeclaration AND Save() (do pliku lub memorystream). –

+1

lub do napisu za pomocą stringwriter ;-) – EricSch

+0

Podobne uwagi do powyższego, ponieważ pytanie oznaczało DTD, samodzielny musi być "nie". –

2

Wystarczy wpisać ten

var doc = 
    new XDocument (
     new XDeclaration ("1.0", "utf-16", "no"), 
     new XElement ("blah", "blih") 
    ); 

I masz

<?xml version="1.0" encoding="utf-16" standalone="no"?> 
<blah>blih</blah> 
+7

Nie do końca poprawne, funkcja ToString nie będzie działać. – EricSch

+0

W rublu używam LinqPada do testowania i przegapiłem Save ... –

+1

Ponadto, ponieważ pytanie wskazuje na użycie DTD, samodzielny musi być "nie". –

9

Jest to zdecydowanie najlepszy sposób, a najbardziej do zaakceptowania:

var xdoc = new XDocument(new XElement("Root", new XElement("Child", "台北 Táiběi."))); 

string mystring; 

using(var sw = new MemoryStream()) 
{ 
    using(var strw = new StreamWriter(sw, System.Text.UTF8Encoding.UTF8)) 
    { 
     xdoc.Save(strw); 
     mystring = System.Text.UTF8Encoding.UTF8.GetString(sw.ToArray()); 
    } 
} 

i mogę powiedzieć, że tylko dlatego, że można zmienić kodowanie do niczego zmieniając .UTF8 do. Unicode lub .UTF32

0

KOD VB.NET Rozwiązanie

Kod

Dim _root As XElement = <root></root> 
    Dim _element1 As XElement = <element1>i am element one</element1> 
    Dim _element2 As XElement = <element2>i am element one</element2> 
    _root.Add(_element1) 
    _root.Add(_element2) 
    Dim _document As New XDocument(New XDeclaration("1.0", "UTF-8", "yes"), _root) 
    _document.Save("c:\xmlfolder\root.xml") 

Wyjście Uwaga (proszę otworzyć wyjście w notatniku) notatka

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<root> 
    <element1>i am element one</element1> 
    <element2>i am element one</element2> 
</root> 
Powiązane problemy