xml错误:无法将非空白字符添加到内容中

xml错误:无法将非空白字符添加到内容中,xml,c#-4.0,linq-to-xml,Xml,C# 4.0,Linq To Xml,我正在尝试打开一个XML文档,如下所示: var doc = new XDocument("c:\\temp\\contacts.xml"); var reader = doc.CreateReader(); var namespaceManager = new XmlNamespaceManager(reader.NameTable); namespaceManager.AddNamespace("g", g.NamespaceName); var node = doc.XPathSelect

我正在尝试打开一个XML文档,如下所示:

var doc = new XDocument("c:\\temp\\contacts.xml");
var reader = doc.CreateReader();
var namespaceManager = new XmlNamespaceManager(reader.NameTable);
namespaceManager.AddNamespace("g", g.NamespaceName);
var node = doc.XPathSelectElement("/Contacts/Contact/g:Name[text()='Patrick Hines']", namespaceManager);
node.Value = "new name Richard";
doc.Save("c:\\temp\\newcontacts.xml");
<?xml version="1.0" encoding="utf-8"?>
<Contacts xmlns:g="http://something.com">
  <Contact>
    <g:Name>Patrick Hines</g:Name>
    <Phone>206-555-0144</Phone>
    <Address>
      <street>this street</street>
    </Address>
  </Contact>
</Contacts>
我在第一行返回一个错误:

Non whitespace characters cannot be added to content.
XML文件如下所示:

var doc = new XDocument("c:\\temp\\contacts.xml");
var reader = doc.CreateReader();
var namespaceManager = new XmlNamespaceManager(reader.NameTable);
namespaceManager.AddNamespace("g", g.NamespaceName);
var node = doc.XPathSelectElement("/Contacts/Contact/g:Name[text()='Patrick Hines']", namespaceManager);
node.Value = "new name Richard";
doc.Save("c:\\temp\\newcontacts.xml");
<?xml version="1.0" encoding="utf-8"?>
<Contacts xmlns:g="http://something.com">
  <Contact>
    <g:Name>Patrick Hines</g:Name>
    <Phone>206-555-0144</Phone>
    <Address>
      <street>this street</street>
    </Address>
  </Contact>
</Contacts>

帕特里克·海因斯
206-555-0144
这条街

看起来您正试图将XML文件加载到XDocument中,但要这样做,您需要调用
XDocument.load(“C:\\temp\\contacts.XML”)-无法将XML文件传递到构造函数中

您还可以使用
XDocument.Parse(stringXml)加载XML字符串

将第一行更改为:

var doc = XDocument.Load("c:\\temp\\contacts.xml");
它会起作用的

作为参考,
XDocument
构造函数有4个重载:

XDocument();
XDocument(Object[]);
XDocument(XDocument);
XDocument(XDeclaration, Object[]);
您可能一直在考虑第三种方法(
XDocument(XDocument)
),但要使用这种方法,您必须编写:

var doc = new XDocument(XDocument.Load("c:\\temp\\contacts.xml"));
如果
var doc=XDocument.Load(“c:\\temp\\contacts.xml”)就足够了

有关详细信息,请参阅。

使用XDocument.Parse(stringxml)

XDocument xdoc=XDocument.load(path)