在c#中编辑XML节点

时间:2013-12-05 19:36:03

标签: c# xml xpath

我正在尝试编辑.xml文件中的节点,但我无法使其正常工作。

我的XML:

<configuration>
  <car title="Ferrari">
    <url>http://www.ferrari.com</url>
  </car>
</configuration>

我在c#中的代码:

    string var_x = "Ferrari";
    XmlDocument doc = new XmlDocument();
    doc.Load("Config.xml");
    XmlNode itemTitle = doc.SelectSingleNode("/configuration/car[@title = '" + var_x + "']");
    XmlNode itemUrl = doc.SelectSingleNode("/configuration/car[@title = '" + var_x + "']/url");


    itemTitle.InnerText = texbox_title.Text;
    itemUrl.InnerText = textbox_url.Text;

    doc.Save("Config.xml");

我无法获取上面的代码来处理我的xml。我无法编辑该节点。也许是XPath的问题,但我无法弄清楚为什么它不能正常工作。

使用上面的c#代码后的我的XML:

<configuration>
  <car title="Ferrari">NEW_NAME</car>
</configuration>

2 个答案:

答案 0 :(得分:0)

如果要更改car元素的属性标题的值,请按如下所示更改代码:

 XmlElement itemTitle = (XmlElement)doc.SelectSingleNode("/configuration/car[@title = '" + var_x + "']");
 XmlNode itemUrl = doc.SelectSingleNode("/configuration/car[@title = '" + var_x + "']/url");

 itemTitle.Attributes["title"].Value = texbox_title.Text;
 itemUrl.InnerText = textbox_url.Text;

在您的版本中,汽车元素的完整内部文本(包括url子元素)将被汽车标题覆盖。
此外,您需要将SelectSingleNode的结果转换为XmlElement,因为它具有Attributes集合。

答案 1 :(得分:0)

属性InnerText指的是文本的所有内容,因此您要替换car元素的内容,包括带有行的url元素:

itemTitle.InnerText = texbox_title.Text;

请改用以下内容:

itemTitle.Attributes["title"].Value = texbox_title.Text;
itemUrl.InnerText = textbox_url.Text;