0

I have used XDocument to create simple xml document.I have created document with XDocument and XDeclaration.

XDocument encodedDoc8 = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
new XElement("Root", "Content"));

If i save this document to file means the encoding type is not changed.

using (TextWriter sw = new StreamWriter(@"C:\sample.txt", false)){
   encodedDoc8.Save(sw);
}

Output:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>Content</Root>   

But,if I use XDocument's WriteTo method to print the xml means encoding type is changed.

using (XmlWriter writ = XmlWriter.Create(Console.Out))
{
   encodedDoc8.WriteTo(writ);
}

Output:

<?xml version="1.0" encoding="IBM437" standalone="yes"?><Root>Content</Root>

Why this happened?.Please update your answers.Thanks in advance.

yoganathan k
  • 213
  • 4
  • 16

1 Answers1

2

If you look at the reference source for XmlWriter.Create, the chain of calls would eventually lead to this constructor:

public XmlTextWriter(TextWriter w) : this() {
    textWriter = w;
    encoding = w.Encoding;
    xmlEncoder = new XmlTextEncoder(w);
    xmlEncoder.QuoteChar = this.quoteChar;
}

The assignment encoding = w.Encoding provides an explanation to what is happening in your case: the Encoding setting of the Console.Out text writer is copied to the encoding setting of the newly created XmlTextWriter, replacing the encoding that you supplied in the XDocument.

Sergey Kalinichenko
  • 714,442
  • 84
  • 1,110
  • 1,523