C# 使用XPathNavigator在节点间循环
下面是我正在使用的xml示例。为了能够从personData节点开始并迭代结果,我已经考虑了各种各样的选项,除非我从根节点开始手动浏览每个子节点,否则我似乎什么都做不到。有谁能建议我如何做到这一点而不从根本上开始 我的代码目前是C# 使用XPathNavigator在节点间循环,c#,xml,xpath,C#,Xml,Xpath,下面是我正在使用的xml示例。为了能够从personData节点开始并迭代结果,我已经考虑了各种各样的选项,除非我从根节点开始手动浏览每个子节点,否则我似乎什么都做不到。有谁能建议我如何做到这一点而不从根本上开始 我的代码目前是 using (var r = File.OpenText(@"C:\S\sp.xml")) { XPathDocument document = new XPathDocument(XmlReader.Create(r));
using (var r = File.OpenText(@"C:\S\sp.xml"))
{
XPathDocument document = new XPathDocument(XmlReader.Create(r));
XPathNavigator xPathNav = document.CreateNavigator();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xPathNav.NameTable);
nsmgr.AddNamespace("g2", "http://person.transferobject.com/xsd");
XPathNodeIterator xni = xPathNav.Select("/g2:companys/g2:company/g2:person/g2:personData", nsmgr);
foreach (XPathNavigator nav in xni)
Console.WriteLine(nav.Name);
}
Xml
IG2
2013年3月21日星期四15:56:42 GMT
2
史密斯街37号
县-37
Po12 123
弗莱德
布洛格斯
H1
3.
2000-04-25
AN@AN.AOM
2003-09-03
史密斯街37号
县-37
Po12 123
约翰
布洛格斯
H1
3.
1999-04-25
AN@AN.AOM
2003-09-03
您是否只是在问如何在不列出完整路径的情况下遍历personData
节点?如果这是你想做的,你可以这样做:
XPathNodeIterator xni = xPathNav.Select("//g2:personData", nsmgr);
您只是在问如何在不列出完整路径的情况下遍历
personData
节点?如果这是你想做的,你可以这样做:
XPathNodeIterator xni = xPathNav.Select("//g2:personData", nsmgr);
我知道您正在使用XPath,但由于您对XPath有一个答案,我将使用Linq给出一个答案
using System;
using System.Linq;
using System.Xml.Linq;
namespace xmlTest
{
class Program
{
static void Main()
{
XDocument doc = XDocument.Load("C:\\Users\\me\\Desktop\\so.xml");
var personDataDetails = (from p in doc.Descendants().Elements()
where p.Name.LocalName == "personData"
select p);
foreach (var item in personDataDetails)
{
Console.WriteLine(item.ToString());
}
Console.ReadKey();
}
}
}
我知道您正在使用XPath,但由于您对XPath有一个答案,我将使用Linq给出一个答案
using System;
using System.Linq;
using System.Xml.Linq;
namespace xmlTest
{
class Program
{
static void Main()
{
XDocument doc = XDocument.Load("C:\\Users\\me\\Desktop\\so.xml");
var personDataDetails = (from p in doc.Descendants().Elements()
where p.Name.LocalName == "personData"
select p);
foreach (var item in personDataDetails)
{
Console.WriteLine(item.ToString());
}
Console.ReadKey();
}
}
}