0

我正在编写一个 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 的方式来做到这一点?

4

0 回答 0