Xml error: символы небезопасного пробела не могут быть добавлены в контент

Я пытаюсь открыть 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");

Я возвращаю ошибку в первой строке:

Non whitespace characters cannot be added to content.

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>

Ответы

Ответ 1

Похоже, вы пытаетесь загрузить XML файл в XDocument, но для этого вам нужно позвонить XDocument.Load("C:\\temp\\contacts.xml"); - вы не можете передать XML файл в конструктор.

Вы также можете загрузить строку XML с помощью XDocument.Parse(stringXml);.

Измените свою первую строку на:

var doc = XDocument.Load("c:\\temp\\contacts.xml");

И он будет работать.

Для справки существует 4 перегрузки конструктора XDocument:

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 Constructor.

Ответ 2

XDocument xdoc=XDocument.load(path)

Ответ 3

Использовать XDocument.Parse(stringxml)