web-dev-qa-db-fra.com

erreur xml: impossible d'ajouter du contenu à des caractères non-blancs

J'essaye d'ouvrir un xmldocument comme ceci:

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");

Je retourne une erreur dans la première ligne:

Non whitespace characters cannot be added to content.

Le fichier xml ressemble à ceci:

<?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>
17
user603007

On dirait que vous essayez de charger un fichier XML dans un XDocument, mais vous devez pour cela appeler XDocument.Load("C:\\temp\\contacts.xml");. Vous ne pouvez pas transmettre de fichier XML au constructeur.

Vous pouvez également charger une chaîne de code XML avec XDocument.Parse(stringXml);.

Changez votre première ligne en:

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

Et ça va marcher.

Pour référence, il y a 4 surcharges du constructeur XDocument:

XDocument();
XDocument(Object[]);
XDocument(XDocument);
XDocument(XDeclaration, Object[]);

Vous pensiez peut-être au troisième (XDocument(XDocument)), mais pour utiliser celui-ci, vous devez écrire:

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

Ce qui serait redondant lorsque var doc = XDocument.Load("c:\\temp\\contacts.xml"); suffira.

Voir XDocument Constructor pour plus de détails.

46
Tim
XDocument xdoc=XDocument.load(path)
0
hadi.sh

Utilisez XDocument.Parse (string xml)

0
tichra