0

このxmlfileを作成しました:

<?xml version="1.0" encoding="utf-8"?>
<Contacts xmlns:g="http://something.com">
  <Contact>
    <g:Phone>206-555-0144</g:Phone>
    <g:Name>Patrick Hines</g:Name>
    <g:Address>
      <street>this street</street>
    </g:Address>
  </Contact>
</Contacts>

電話ノードを選択してから、次のノードを取得しようとしています。電話ノードは一意であるため、最初にこれを探します。名前の値を変更するにはどうすればよいですか?

var doc = XDocument.Load("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:Phone[text()='206-555-0144']", namespaceManager);

var nd =node.NextNode // does not work

node.Value = "sjfjks";
4

2 に答える 2

2

まず第一に、あなたのコードはまったくコンパイルされません。;問題のある行の最後に行方不明です。

そして、おそらくもっと重要なのは、変数 (要素を指す) へnode.NextNodeの代入ですが、 !の代わりに変更することです。最初に、よりわかりやすい名前を変数に割り当てる必要があります。nd<name>node.Valuend

私はそれを次のように動作させることができます:

var phone = doc.XPathSelectElement("/Contacts/Contact/g:Phone[text()='206-555-0144']", namespaceManager);

// you have to cast NextNode to XElement to allow changing it's value
var name = (XElement)phone.NextNode;

// change name.Value instead of phone.Value!
name.Value = "test";

そのdoc値を出力すると、次のようになります。

<Contacts xmlns:g="http://something.com">
  <Contact>
    <g:Phone>206-555-0144</g:Phone>
    <g:Name>test</g:Name>
    <g:Address>
      <street>this street</street>
    </g:Address>
  </Contact>
</Contacts>
于 2013-09-04T07:37:44.207 に答える