XML - Select xmlNode 取决于 innertext
XML - Select xmlNode depending on innertext
我有一个 'xmlDocument'-对象,
其中包含此结构:
<Projects>
<Project>
<Name>Value1</Name>
</Project>
<Project>
<Name>Value2</Name>
</Project>
</Projects>
我需要在运行时通过 C# 更改这些值。
我的想法是
- 新建'xmlnode'-对象
- 更改其内部文本
- 保存文档
但我不知道如何 select xml-node 取决于其内部文本。
我研究了一下,然后试了一下:
XmlNode nameNode = doc.SelectSingleNode("Projects\Project\Name[text()='" + projectName + "']");
这导致 'XPathException'。
路径怎么写才正确?
我建议使用 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)
我意识到很久以前有人问过这个问题,并且找到了一个替代解决方案,但我遇到了类似的问题,我设法通过使用带有以下内容的 XmlNodeList 使用 xpath 解决了这个问题
XmlNode root = xmlDoc.DocumentElement;
XmlNodeList nodes = root.SelectNodes("//*[local-name()='Projects'//*[local-name()='Project'//*[local-name()='Name'][text()='" + projectName + "']");
然后您可以遍历 XmlNodeList
foreach (XmlNode xn in nodes)....
张贴以防其他人想使用此方法
我有一个 'xmlDocument'-对象, 其中包含此结构:
<Projects>
<Project>
<Name>Value1</Name>
</Project>
<Project>
<Name>Value2</Name>
</Project>
</Projects>
我需要在运行时通过 C# 更改这些值。 我的想法是
- 新建'xmlnode'-对象
- 更改其内部文本
- 保存文档
但我不知道如何 select xml-node 取决于其内部文本。 我研究了一下,然后试了一下:
XmlNode nameNode = doc.SelectSingleNode("Projects\Project\Name[text()='" + projectName + "']");
这导致 'XPathException'。
路径怎么写才正确?
我建议使用 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)
我意识到很久以前有人问过这个问题,并且找到了一个替代解决方案,但我遇到了类似的问题,我设法通过使用带有以下内容的 XmlNodeList 使用 xpath 解决了这个问题
XmlNode root = xmlDoc.DocumentElement;
XmlNodeList nodes = root.SelectNodes("//*[local-name()='Projects'//*[local-name()='Project'//*[local-name()='Name'][text()='" + projectName + "']");
然后您可以遍历 XmlNodeList
foreach (XmlNode xn in nodes)....
张贴以防其他人想使用此方法