以下代码为我提供了一个nodeList来迭代:
XPathNavigator thisNavigator = thisXmlDoc.CreateNavigator();
XPathNodeIterator dossierNodes = thisNavigator.Select("changedthisname/dossiers/dossier");
我正在处理这个nodeList,我需要从这个列表中获取另一个节点列表。 我试图通过使用此代码来实现此目的:
XPathNavigator alineanodesNavigator = dossierNodes.Current;
XPathNodeIterator alineaNodes = alineanodesNavigator.Select("/dossier/alineas/alinea");
我在while(dossierNodes.MoveNext())循环中使用此代码,并希望此节点列表填充所有“allinea”。但是我没有得到任何结果回到我的alineaNodes迭代器。
文档结构如下:
如何从当前档案节点获取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();
答案 0 :(得分:3)
正确的完整路径是
changedthisname/dossiers/dossier/alineas/alinea
因此,如果您首先选择changedthisname/dossiers/dossier
,那么相对路径为:
alineas/alinea
答案 1 :(得分:2)
您已经在档案节点中,因此当您在XPath查询的开头添加'/'时,您说“来自父节点”,此时恰好已经是档案节点。将您的XPath查询更改为:
修改强>
看到你的输出后,我意识到自己的错误。您应该从原始查询中删除前导斜杠。
“卷宗/ alineas / ALINEA”
这应该可以解决问题。
答案 2 :(得分:0)
好的,我已经解决了这个问题。
不是试图通过使用xpath来获取alinea,我只需在我的节点导航器上使用SelectDescendants,就像这里:
XPathNavigator alineanodesNavigator = dossierNodes.Current;
XPathNodeIterator alineaNodes = alineanodesNavigator.SelectDescendants("alinea", "", false);
List<Alinea> thisAlineaList = new List<Alinea>();
答案 3 :(得分:0)
在您对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())
{
}
}
答案 4 :(得分:-1)
Linq to XML非常适合这个实例。
var alineaNodes = from alinea in XDocument.Load(alldata.xml).Descendents("alinea")
select alinea;
返回包含alldata.xml中所有元素的IEnumerable。希望这可以帮助。真的看看Linq这些东西很棒。