web-dev-qa-db-ja.com

xmlエラー:空白以外の文字はコンテンツに追加できません

私はこのような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>
21
user603007

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[]);
_

あなたは3番目のもの(XDocument(XDocument))を考えていたかもしれませんが、それを使用するにはあなたは書く必要があります:

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

var doc = XDocument.Load("c:\\temp\\contacts.xml");で十分な場合、これは冗長になります。

詳細な説明については XDocumentコンストラクタ を参照してください。

51
Tim

XDocument.Parse(string xml)を使用します

1
tichra
XDocument xdoc=XDocument.load(path)
0
hadi.sh