我正在编写一个 C# 函数,我需要使用 Xpath 获取节点的值,如果获取的值与给定的字符串匹配,我需要将 Xpath 传递给 API,该 API 将节点的当前值替换为存储在数据库中的值.
问题是给定的 Xpath 有多个匹配项,我使用字符串匹配条件将它们过滤掉并能够找出节点,但是,我不知道如何捕获匹配节点的确切 Xpath 并将其传递给API 让它工作。
让我们以这个 XML 为例
<GrandParent>
<Parent>
<Child1>John
</Child1>
<Child2>Emily
</Child2>
</Parent>
<Parent>
<Child1>Frank
</Child1>
<Child2>Niki
</Child2>
</Parent>
<Parent>
<Child1>Mia
</Child1>
<Child2>Noah
</Child2>
</Parent>
</GrandParent>
现在我必须使用 Xpath /GrandParent/Parent/Child1 获取节点,其值为 John。
我正在使用 XPathNavigator 和 XPathIterator 在 C# 中执行此操作
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(requestXML);
XPathNavigator nav;
nav = xmlDoc.CreateNavigator();
XPathNodeIterator allMatchingNodes = nav.Select(SourceXPath);
int countNodes = 1;
foreach (XPathNavigator node in allMatchingNodes)
{
if(node.Value.Equals("John"))
{
Xpath = SourceXPath + "[" + countNodes + "]";
break;
}
}
但是,这将是一种不正确的方法,因为它将创建 xpath /GrandParent/Parent/Child1[1]
,因此后续 API 替换不正确。
我想要 xpath,因为/GrandParent/Parent[1]/Child1
有没有使用多个 foreach 的方式来做到这一点?