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.NextNodend变量(指向<name>元素)但您更改node.Value而不是nd!您绝对应该首先为您的变量分配更具描述性的名称!

我可以使它与以下一起工作:

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 回答
0

尝试首先添加根节点,然后如果仍然不起作用,请选择没有整个路径的电话节点:

var doc = XDocument.Load("c:\\temp\\contacts.xml");
var reader = doc.CreateReader();
var namespaceManager = new XmlNamespaceManager(reader.NameTable);
namespaceManager.AddNamespace("g", g.NamespaceName);

var root = doc.Root; // set the Root of your document.

var node = root.XPathSelectElement("/Contacts/Contact/g:Phone[text()='206-555-0144']", namespaceManager); 
// if still doen't work try with 
// root.XPathSelectElement("//g:Phone[text()='206-555-0144']", namespaceManager);

var nd =node.NextNode;

node.Value = "sjfjks";
于 2013-09-04T07:37:52.537 回答