这很好用:
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:无法将非空格字符添加到内容中。
这两个例子不完全相同吗?这是怎么回事?
答案 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