Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从节点列表c.net中获取节点列表_C#_.net_Xml_Xpath - Fatal编程技术网

C# 从节点列表c.net中获取节点列表

C# 从节点列表c.net中获取节点列表,c#,.net,xml,xpath,C#,.net,Xml,Xpath,下面的代码为我提供了一个节点列表: XPathNavigator thisNavigator = thisXmlDoc.CreateNavigator(); XPathNodeIterator dossierNodes = thisNavigator.Select("changedthisname/dossiers/dossier"); 我正在处理这个节点列表,我需要从列表中抓取另一个节点列表。 我正试图通过使用以下代码来实现这一点: XPathNavigator alineanodesNav

下面的代码为我提供了一个节点列表:

XPathNavigator thisNavigator = thisXmlDoc.CreateNavigator();
XPathNodeIterator dossierNodes = thisNavigator.Select("changedthisname/dossiers/dossier");
我正在处理这个节点列表,我需要从列表中抓取另一个节点列表。 我正试图通过使用以下代码来实现这一点:

XPathNavigator alineanodesNavigator = dossierNodes.Current;
XPathNodeIterator alineaNodes = alineanodesNavigator.Select("/dossier/alineas/alinea");
我在whiledosierNodes.MoveNext循环中使用了这段代码,希望这个节点列表中填充所有allinea的。但是,我不会将任何结果返回到AlineNodes迭代器

文档结构如下所示:

如何从当前档案节点获取alinea节点

我调试了一下,结果是:

    Stream responseStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
    string xml = reader.ReadToEnd();
    XmlDocument thisXmlDoc = new XmlDocument();
    thisXmlDoc.LoadXml(xml);

    XPathNavigator thisNavigator = thisXmlDoc.CreateNavigator();
您已经在档案节点中,因此,当您在XPath查询的开头输入“/”时,您所说的是来自父节点的信息,此时正好已经是档案节点。将XPath查询更改为:

编辑:

看到你的作品后,我意识到我的错误。您应该从原始查询中删除前导正斜杠

档案/alineas/alinea


这就应该做到了。

Linq to XML非常适合这个实例

var alineaNodes = from alinea in XDocument.Load(alldata.xml).Descendents("alinea")
                  select alinea;

返回包含alldata.xml中所有元素的IEnumerable。希望这有帮助。仔细研究一下Linq,它对这些事情很有用。

好的,我已经解决了这个问题

我不会尝试使用xpath获取alinea,而是在节点导航器上使用SelectDescents,如下所示:

            XPathNavigator alineanodesNavigator = dossierNodes.Current;
            XPathNodeIterator alineaNodes = alineanodesNavigator.SelectDescendants("alinea", "", false);


            List<Alinea> thisAlineaList = new List<Alinea>();
在上次调用Select时,使用以下XPath表达式://alinea

以下代码段在alineas上迭代:

        XPathNavigator thisNavigator = doc.CreateNavigator();
        XPathNodeIterator dossierNodes = thisNavigator.Select("//dossier");
        while (dossierNodes.MoveNext())
        {
            XPathNavigator alineanodesNavigator = dossierNodes.Current;
            XPathNodeIterator alineaNodes = alineanodesNavigator.Select("//alinea");

            while (alineaNodes.MoveNext())
            {

            }
        }
正确的完整路径是

changedthisname/dossiers/dossier/alineas/alinea
因此,如果您首先选择changedthisname/dossiers/dossier,则相对路径为:

alineas/alinea

我不知道为什么,但这不管用。它说这不会返回任何结果。我不想要一个包含所有AlineNodes的列表,因为我在编写器中处理当前项。我需要将AlineA添加到当前工作列表中。您可以将XDocument.Loadalldata.xml更改为所需的任何列表、xml文档或数据库。然后,您可以根据列表中所需的任何方法调整表示groundantsaliena的部分,以便查看其中包含的各个元素。Linq确实拥有您在本例中所寻找的所有功能。您还可以向其添加条件,例如在select之前添加where语句。好的,谢谢,我会很快尝试。如果有效,你会得到分数;。我把它放在我的帖子底部。如何编辑我的代码使其像你的一样工作请看,我认真地试过了,但根本不起作用。我甚至调试了所有这些,我不知道为什么这不起作用。但是,我现在已经解决了这个问题:。谢谢你的帮助。根据我的说法,答案也是正确的,但不知何故,我无法得到这个表达式的列表;。不管怎样,你是对的,我试过这个。你得到了分数。