当我在XPathNodeIterator.Current.SelectSingleNode下搜索时,它只是在整个xml文

本文关键字:xml XPathNodeIterator Current SelectSingleNode 搜索 | 更新日期: 2023-09-27 18:32:43

嗨,我正在使用XPathNodeIterator在XML文档下迭代XML节点列表。在迭代条件匹配时,我需要在该当前节点下的特定值。相反,SelectSingleNode正在从其他父节点返回节点...我举个例子:

XPathNavigator SourceReqNav = // Load this using an xml;
XmlNamespaceManager manager = new XmlNamespaceManager(SourceReqNav.NameTable);
SourceReqNav.MoveToRoot();
XPathNodeIterator nodeIterator = SourceReqNav.Select(parentPath, manager);
while (nodeIterator.MoveNext())
{
 //If condition matches at nodeIterator.Current node, Executing a partial xpath related to   
 //only that current node
XPathNavigator singleNode = nodeIterator.Current.SelectSingleNode(xpath, namespaceManager);
// Here at above line, It should return null as Child node doesn't exist but It 
// searches in whole xml and finding the matching one..even though the XPATH is kind of
// partial and applicable to only that node structure.
}

示例 xml:

<RootNode>
 <Element id=1>
   <Address>
     <Name>      </Name>
     <ZipCode>456</ZipCode>
     <Street> </Street>
   </Address>
 </Element>
 <Element id=2>
 </Element>
 <Element id=3> </Element>
</RootNode>

假设,我正在迭代所有"元素"并尝试找到元素 id=2 的"地址"。现在,在迭代时,假设我在"元素 id=2"。当我找到节点时,我会说从当前节点(nodeIterator.Current)中选择一个名为"Zip"的单个节点。为此,我使用 xpath 作为"/地址/邮政编码"(这里的格式可能是错误的,因为这只是例如)。在这种情况下,它应该返回 null,但它从"元素 id=1"返回邮政编码

任何帮助都是可观的。

当我在XPathNodeIterator.Current.SelectSingleNode下搜索时,它只是在整个xml文

由于时间限制(用于修复),我采取了更长的路线。我没有直接在当前节点上搜索,而是从当前节点获取子树(类型:XmlReader),并通过使用它加载了一个XPathDocument。比从中创建了一个XPathNavigator。比在其上应用相同的部分 XPath。

nodeIterator.Current.SelectSingleNode(xpath, namespaceManager);

这被修改为:

XmlReader sourceReader = nodeIterator.Current.ReadSubtree();
XPathDocument doc = new XPathDocument(sourceReader);
XPathNavigator sourceNavigator = doc.CreateNavigator();
sourceNavigator.SelectSingleNode(xpath, namespaceManager);

如果有人有更好的答案,我仍然想避免它。希望这会帮助某人。