gpt4 book ai didi

c# - 在 .net (C#) 中更改 XmlDocument 的 XPath 根目录?

转载 作者:行者123 更新时间:2023-11-30 21:17:32 26 4
gpt4 key购买 nike

当通过例如从 XmlDocument 中选择时XPath 方法 SelectSingleNode 我们得到一个由第一个匹配节点组成的 XmlNode,我们称它为 。如果我们在 上做进一步的选择,那么人们可能会认为现在的 XPath-root 就是这个节点,但这是不正确的,root 仍然与原始 XmlDocument 中的相同。这是一个例子:

XmlDocument xd = new XmlDocument();
xd.LoadXml(@"<root>
<subroot>
<elm>test1</elm>
<elm>test2</elm>
<elm>test3</elm>
</subroot>
</root>");
XmlNode xnSubRoot = xd.SelectSingleNode("/root/subroot");

//This is the XPath I want to be able to use, but it returns null.
XmlNode xnElm = xnSubRoot.SelectSingleNode("/subroot/elm");

//This works, but the XPath-root is the same as in the original document.
xnElm = xnSubRoot.SelectSingleNode("/root/subroot/elm");

有什么方法可以“修复”xnSubRoot 的根,以便我可以使用我想要的 XPath?我的问题的原因是因为我有一个案例,我正在调用一个返回 XmlNode 的 Web 服务,其中 OuterXml-property 显示“/Data/SubElement/...”的结构等等,但是当运行 XPath 时“/Data"然后返回 null,只有 "/SubElement"有效,即 XPath-root 似乎比实际文档根低一级。

我确信对此有一个完全合理的解释,或者我遗漏了一些重要的东西。但是我似乎真的找不到任何东西,即使我读过http://msdn.microsoft.com/en-us/library/d271ytdx(VS.80).aspx .

注意我确实意识到可以使用 XPath“//subroot/elm”,但我也可能会在 XML 结构中进一步获取其他元素。

最佳答案

因为您是从 Root/SubElement 中选择的,所以试试这个:

XmlNode xnElm = xnSubRoot.SelectSingleNode("elm"); 

它将返回当前节点的第一个子elm节点。

编辑(来自评论中提供的附加信息):

在这种特定情况下,您将从 WebService 调用中获取 XmlNode(这是您的数据节点)。该 XmlNode 上的所有 XPath 请求都将与其相关。

我建议您修改所有 XPath 以使用像 webServiceNode.SelectSingleNode("SubElement/SubSubElement"); 这样的选择器。没有理由在此处指定绝对 XPaths 查询。

关于c# - 在 .net (C#) 中更改 XmlDocument 的 XPath 根目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4735613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com