XDocument构造函数的意外异常

时间:2009-09-17 13:36:35

标签: c# .net linq-to-xml

这很好用:

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

但是,如果我将其更改为将“params数组”显式地作为数组传递:

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 个答案:

答案 0 :(得分:21)

如果使用XDocument构造函数而不是工厂方法,则在解析XML字符串时可能会出现此错误。

假设:

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

这失败了:

var doc = new XDocument(xmlString);

这有效:

var doc = XDocument.Parse(xmlString);

答案 1 :(得分:14)

当你使用第一种方法时,你正在使用XDocument的重载,它首先采用XDeclaration,然后是内容的参数。但是,当您使用第二种方法时,您正在使用带有内容的参数的重载。你的object []数组中的XDeclaration是作为内容传播的,而且它正在爆炸。

见这里:http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.xdocument.aspx