Страницы

Поиск по вопросам

пятница, 7 июня 2019 г.

Вывод XML на консоль - отсутствует заголовок xml файла C#

Создал XML файл с помощью класса XDocument. Вывожу готовую Xml в Консоль, но не вижу там xml заголовка в начале файла. Если его сохранить на диск, то заголовок присутствует. Почему так происходит? И как можно его туда добавить?
XDocument xdoc = new XDocument(
new XDeclaration("1.0", "Windows-1251","yes"), new XElement("Product", new XElement ("prequest", new XElement("req", new XElement("AddressReq", new XElement ("street","Горького"), new XElement ("houseNumber","1"), new XElement("apartment", "38"), new XElement("city", "Магадан"), new XElement("postal", "685000"), new XElement("addressType", "1")), new XElement("AddressReq", new XElement("street", "Горького"), new XElement("houseNumber", "1"), new XElement("apartment", "38"), new XElement("city", "Магадан"), new XElement("postal", "685000"), new XElement("addressType", "1")), new XElement("IdReq", new XElement("idNum", "273"), new XElement("idType","21"), new XElement("seriesNumber", "64"), new XElement("issueCountry", "г. Магадан"), new XElement("issueDate", "2006-03-18"), new XElement("issueAuthority", "ОВД") ), new XElement("IdReq", new XElement("idNum", "1"), new XElement("idType", "32") ), new XElement("InquiryReq", new XElement("ConsentReq", new XElement("consentFlag", "Y"), new XElement("consentDate", "2016-01-20"), new XElement("consentExpireDate", "2021-10-21"), new XElement("consentPurpose", "4"), new XElement("otherConsentPurpose", "Job pre-screening"), new XElement("reportUser", "DG Human Resources Incorporated"), new XElement("liability", "Y") ), new XElement("inqPurpose", "01"), new XElement("inqAmount", "10000"), new XElement("currencyCode", "usd") ), new XElement("PersonReq", new XElement("name1", "К"), new XElement("first", "Г"), new XElement("paternal", "Г"), new XElement("gender", "1"), new XElement("birthDt", "1900-00-00"), new XElement("placeOfBirth", "Москва") ), new XElement("RequestorReq", new XElement("MemberCode", "V"), new XElement("UserID", "V"), new XElement("Password", "1") ), new XElement("RefReq",
new XElement("product", "CHST") ), new XElement("IOType","B2B"), new XElement("OutputFormat", "xml"), new XElement("lang", "ru") )) ))
Вывод в консоль :
xdoc.Save("C:\\file.xml"); //В сохраненном файле xml есть заголовок byte[] byteArray = Encoding.GetEncoding(1251).GetBytes(xdoc.ToString()); BinaryWriter write = new BinaryWriter(File.Open("C:\\file.dat", FileMode.OpenOrCreate)); write.Write(byteArray); //а вот в бинарном файле нет.
Console.WriteLine(xdoc); //Если вывести сам xdoc то тут тоже нет заголовка. Console.ReadKey();


Ответ

Метод ToString у класса XDocument не выводит заголовок xml. Поэтому его нет в бинарном файле.
Когда вы пишете Console.WriteLine(xdoc) - тут тоже вызывается ToString
Хотите получить заголовок в консоли, используйте
xdoc.Save(Console.Out);
Не пугайтесь, что encoding выведется другой. Кодировка будет такой, какую поддерживает консоль.

Комментариев нет:

Отправить комментарий