Неожиданное исключение из конструктора XDocument
Это отлично работает:
XDocument xdoc = new XDocument(
new XDeclaration("1.1", "UTF-8", "yes"),
new XProcessingInstruction("foo", "bar"),
new XElement("test"));
Однако, если я изменю его, чтобы передать "params array" явно как массив:
object[] content = new object[] {
new XDeclaration("1.1", "UTF-8", "yes"),
new XProcessingInstruction("foo", "bar"),
new XElement("test")
};
xdoc = new XDocument(content);
Сбой:
System.ArgumentException: символы небезопасного пробела не могут быть добавлены в контент.
Разве эти два примера не эквивалентны? Что здесь происходит?
Ответы
Ответ 1
Когда вы используете первый метод, вы используете перегрузку XDocument, которая сначала принимает XDeclaration, а затем параметры для содержимого. Однако, когда вы используете второй подход, вы используете перегрузку, которая принимает параметры для контента. XDeclaration в вашем массиве object [] проходит через контент и что там он взрывается.
Смотрите здесь: http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.xdocument.aspx
Ответ 2
Вы можете получить эту ошибку при анализе строк XML, если вы используете конструктор XDocument
вместо метода factory.
Дано:
var xmlString = "<some-xml />";
Это не удается:
var doc = new XDocument(xmlString);
Это работает:
var doc = XDocument.Parse(xmlString);