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

C# iterator.MoveNext()返回false,尽管XPath查询有效,c#,.net,xpath,C#,.net,Xpath,这个XPath查询有什么问题?在提要标记中,有多个条目标记。XML是有效的,生成的XPath查询也是有效的,我已经用一个名为XPath Visualizer的工具对两者进行了测试 对iterator.MoveNext()的调用返回false,操作后迭代器仍在根节点上。我是不是漏掉了什么明显的东西 var stringReader = new StringReader(importData.Trim()); var xpathDoc = new XPathDocument(str

这个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>

测验
2012-02-07T11:15:04Z
测验
标签:000000

问题在于名称空间-没有任何
条目
元素没有名称空间-您可以看到的元素具有“http://www.w3.org/2005/Atom“从根目录继承的命名空间

就我个人而言,我会使用LINQtoXML来实现这一点,但如果必须使用XPath,则需要使用名称空间管理器来查找具有特定名称空间的元素。在堆栈溢出中搜索“xpath namespace.net”将提供大量选项

LINQ到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)
{
    ...
}

问题在于名称空间-没有任何
条目
元素没有名称空间-您可以看到的元素有“http://www.w3.org/2005/Atom“从根目录继承的命名空间

就我个人而言,我会使用LINQtoXML来实现这一点,但如果必须使用XPath,则需要使用名称空间管理器来查找具有特定名称空间的元素。在堆栈溢出中搜索“xpath namespace.net”将提供大量选项

LINQ到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)
{
    ...
}

我所能想到的就是添加一个XmlNamespaceManager

我所能想到的就是添加一个XmlNamespaceManager

结果集似乎为空。可能是与命名空间相关的问题?结果集似乎为空。可能是名称空间相关的问题?