gpt4 book ai didi

c# - 尽管有效的 XPath 查询,iterator.MoveNext() 返回 false

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:11 25 4
gpt4 key购买 nike

这个 XPath 查询我做错了什么?在提要标签内,有多个条目标签。 XML 是有效的,生成的 XPath 查询也是有效的,我已经使用名为 XPath Visualizer 的工具对两者进行了测试。

对 iterator.MoveNext() 的调用返回 false,并且在操作之后迭代器仍在根节点上。我在这里遗漏了什么明显的东西吗?

var stringReader = new StringReader(importData.Trim());

var xpathDoc = new XPathDocument(stringReader);

XPathNavigator xPathNav = xpathDoc.CreateNavigator();

string xPathString = "//" + masterNode; // Evaluates to '//entry'

XPathExpression xPathExpr = xPathNav.Compile(xPathString);

XPathNodeIterator iterator = xPathNav.Select(xPathExpr);

while (iterator.MoveNext())
{
....

示例 XML

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">
<title>Test</title>
<link rel="self" href="http://store.Test.com"/>
<updated>2012-02-07T11:15:04Z</updated>
<author>
<name>Test</name>
</author>
<id>tag:000000</id>
<entry>
<title><![CDATA[Example 7500cl]]></title>
<link><![CDATA[http://store.test.com/example-75cl/]]></link>
<description><![CDATA[example descr........]]></description>
</entry>

最佳答案

问题在于 namespace - 没有任何 entry 元素没有 namespace - 您可以看到的元素具有“http://www.w3.org/2005/Atom” namespace 从根继承。

我个人会为此使用 LINQ to XML,但如果您必须使用 XPath,则需要使用命名空间管理器来查找具有特定命名空间的元素。在 Stack Overflow 中搜索“xpath namespace .net”将为您提供大量选项。

LINQ to XML 代码如下所示:

XDocument doc = XDocument.Parse(importData.Trim());
XNamespace ns = "http://www.w3.org/2005/Atom";
var entries = doc.Descendants(ns + "entry");
foreach (var entry in entries)
{
...
}

关于c# - 尽管有效的 XPath 查询,iterator.MoveNext() 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178304/

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