Неожиданное исключение из конструктора XDocument - PullRequest
17 голосов
/ 17 сентября 2009

Это прекрасно работает:

XDocument xdoc = new XDocument(
   new XDeclaration("1.1", "UTF-8", "yes"),
   new XProcessingInstruction("foo", "bar"),
   new XElement("test"));

Однако, если я изменю его, чтобы передать массив параметров явно в виде массива:

object[] content = new object[] {
   new XDeclaration("1.1", "UTF-8", "yes"),
   new XProcessingInstruction("foo", "bar"),
   new XElement("test")
};
xdoc = new XDocument(content);

Не удается с:

System.ArgumentException: нельзя добавлять символы без пробелов в содержимое.

Разве эти два примера точно не эквивалентны? Что здесь происходит?

Ответы [ 2 ]

21 голосов
/ 20 сентября 2011

Вы можете получить эту ошибку при разборе строк XML, если вместо фабричного метода вы используете конструктор XDocument.

Дано:

var xmlString = "<some-xml />";

Это не удалось:

var doc = new XDocument(xmlString);

Это работает:

var doc = XDocument.Parse(xmlString);
14 голосов
/ 17 сентября 2009

Когда вы используете первый метод, вы используете перегрузку XDocument, которая сначала принимает XDeclaration, а затем параметры для содержимого. Однако, когда вы используете второй подход, вы используете перегрузку, которая принимает параметры для содержимого. XDeclaration в вашем массиве object [] проходит как контент, и вот где он взрывается.

Смотрите здесь: http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.xdocument.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...