Страницы

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

понедельник, 30 марта 2020 г.

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

#c_sharp #xml #binary


Создал 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();

    


Ответы

Ответ 1



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

Ответ 2



Как верно заметили в соседнем ответе, XDocument.ToString() не отображает декларацию документа, но ее можно вывести отдельно: Console.WriteLine(xdoc.Declaration); Console.WriteLine(xdoc);

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

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