XDocument не может загрузить xml версией 1.1 в C# LINQ?

Вы уже получили несколько ответов, в которых упоминается std::for_each.

Хотя они отвечают на вопрос, который вы задали, я бы добавил, что, по крайней мере, по моему опыту, std::for_each - это минимум , полезный из стандартных алгоритмов.

Я использую (для одного примера) std::transform, что в основном a[i] = f(b[i]); или result[i] = f(a[i], b[i]); гораздо чаще, чем std::for_each. Многие люди часто используют std::for_each для печати элементов коллекции; для этого std::copy с std::ostream_iterator в качестве пункта назначения работает намного лучше.

9
задан T.J. Crowder 21 June 2017 в 09:31
поделиться

2 ответа

Первоначальная реакция, просто чтобы подтвердить, что я могу воспроизвести это:

using System;
using System.Xml.Linq;

class Test
{   
    static void Main(string[] args)
    {
        string xml = "<?xml version=\"1.1\" ?><root><sub /></root>";
        XDocument doc = XDocument.Parse(xml);
        Console.WriteLine(doc);
    }
}

Результаты в этом исключении:

Unhandled Exception: System.Xml.XmlException: Version number '1.1' is invalid. Line 1, position 16.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
   at System.Xml.XmlTextReaderImpl.ParseXmlDeclaration(Boolean isTextDecl)
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)
   at System.Xml.Linq.XDocument.Parse(String text, LoadOptions options)
   at System.Xml.Linq.XDocument.Parse(String text)
   at Test.Main(String[] args)

Это все еще не работает с .NET 4.6.

5
ответ дан 4 December 2019 в 21:11
поделиться

«Версия 1.0» жестко закодирована в различных местах стандартных библиотек .NET XML. Например, ваш код, кажется, не соответствует этой строке в System.Xml.XmlTextReaderImpl.ParseXmlDeclaration (bool):

 if (!XmlConvert.StrEqual(this.ps.chars, this.ps.charPos, charPos - this.ps.charPos, "1.0"))

У меня была аналогичная проблема с XDocument.Save, который отказался сохранить 1.1. Это был тот же тип вещей - жестко запрограммированная "1.0" в методе System.Xml.

Я не мог найти никакого другого варианта, который все еще использовал бы стандартные библиотеки.

 if (!XmlConvert.StrEqual(this.ps.chars, this.ps.charPos, charPos - this.ps.charPos, "1.0"))

У меня была аналогичная проблема с XDocument.Save, который отказывался сохранить 1.1. Это был тот же тип вещей - жестко запрограммированная "1.0" в методе System.Xml.

Я не мог найти никакого другого варианта, который все еще использовал бы стандартные библиотеки.

 if (!XmlConvert.StrEqual(this.ps.chars, this.ps.charPos, charPos - this.ps.charPos, "1.0"))

У меня была аналогичная проблема с XDocument.Save, который отказывался сохранить 1.1. Это был тот же тип вещей - жестко запрограммированная "1.0" в методе System.Xml.

Я не мог найти никакого другого варианта, который все еще использовал бы стандартные библиотеки.

5
ответ дан 4 December 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: