XML - 根据innertext选择xmlNode

时间:2015-03-12 09:59:25

标签: c# xml document

我有一个' xmlDocument' -Object, 其中包含以下结构:

<Projects>
  <Project>
    <Name>Value1</Name>
  </Project>
  <Project>
    <Name>Value2</Name>
  </Project>
</Projects>

我需要通过c#在运行时更改这些值。 我的想法是

  • 创建新的&#39; xmlnode&#39; -Object
  • 更改其innertext
  • 保存文档

但我不知道如何根据其innertext选择xml节点。 我研究了一下,并尝试了:

XmlNode nameNode = doc.SelectSingleNode("Projects\\Project\\Name[text()='" + projectName + "']");

导致&#39; XPathException&#39;。

你如何以正确的方式写出路径?

2 个答案:

答案 0 :(得分:2)

我建议使用LINQ to XML而不是XPath:

XDocument doc = ...; // However you load the XML
XElement element = doc.Root
                      .Elements("Project")
                      .Elements("Name")
                      .Where(x => x.Value == projectName)
                      .SingleOrDefault();
// Check whether or not element is null (if so, you haven't found it)

答案 1 :(得分:0)

我意识到很久以前就问过这个问题,并且找到了一个替代解决方案,但是我遇到了类似的问题,我设法通过使用带有以下内容的XmlNodeList使用xpath解决了该问题

XmlNode root = xmlDoc.DocumentElement;

XmlNodeList节点= root.SelectNodes(“ // [local-name()='Projects'// [local-name()='Project'// * [local-name( )='Name'] [text()='“ + projectName +”']“);

然后您可以遍历XmlNodeList

foreach(节点中的XmlNode xn)......

在其他人想使用此方法的情况下发布