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

use*_*007 19 xml linq-to-xml c#-4.0

我试图打开这样的xmldocument:

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");
Run Code Online (Sandbox Code Playgroud)

我在第一行返回错误:

Non whitespace characters cannot be added to content.
Run Code Online (Sandbox Code Playgroud)

xmlfile看起来像这样:

<?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>
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 50

看起来您正在尝试将XML文件加载到XDocument中,但是为此需要调用XDocument.Load("C:\\temp\\contacts.xml");- 您无法将XML文件传递给构造函数.

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

将您的第一行更改为:

var doc = XDocument.Load("c:\\temp\\contacts.xml");
Run Code Online (Sandbox Code Playgroud)

它会奏效.

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

XDocument();
XDocument(Object[]);
XDocument(XDocument);
XDocument(XDeclaration, Object[]);
Run Code Online (Sandbox Code Playgroud)

你可能一直在考虑第三个(XDocument(XDocument)),但要使用那个你必须写的:

var doc = new XDocument(XDocument.Load("c:\\temp\\contacts.xml"));
Run Code Online (Sandbox Code Playgroud)

只要var doc = XDocument.Load("c:\\temp\\contacts.xml");足够,这将是多余的.

有关详细信息,请参阅XDocument构造函数.


tic*_*hra 5

使用

XDocument.Parse(stringxml)
Run Code Online (Sandbox Code Playgroud)