C# 使用XPathNavigator循环浏览XML文档

C# 使用XPathNavigator循环浏览XML文档,c#,.net,xml,xpath,C#,.net,Xml,Xpath,我有下面的XML,我正在尝试将值写入CSV文件。然而,我不知道如何进一步进行,因为我已经尝试过抛出错误。下面返回:“表达式必须计算为节点集”。感谢您的帮助 XML: 更改导航中的XPathNavigator节点。选择(“/Envelope/Body/RESULT/”)到导航中的XPathNavigator节点。选择(“/Envelope/Body/RESULT/Mailing”),然后使用例如字符串MailingId=node。选择SingleNode(“MailingId”)。值好的,您可以尝

我有下面的XML,我正在尝试将值写入CSV文件。然而,我不知道如何进一步进行,因为我已经尝试过抛出错误。下面返回:“表达式必须计算为节点集”。感谢您的帮助

XML:


更改导航中的XPathNavigator节点。选择(“/Envelope/Body/RESULT/”)到导航中的XPathNavigator节点。选择(“/Envelope/Body/RESULT/Mailing”),然后使用例如
字符串MailingId=node。选择SingleNode(“MailingId”)。值

好的,您可以尝试以下方法:

foreach (XPathNavigator node in nav.Select("/Envelope/Body/RESULT/Mailing"))
{
    string MailingId = node.SelectSingleNode("./MailingId").Value;
    // and so on

注意:它应该和你的查询一样是
邮寄
而不是
结果
,并且应该
/
结束,所有我尝试抛出的错误
谢谢。它起作用了!顺便说一句,“/MailingId”和使用“MailingId”有什么区别?@stats101事实上,在这种特殊情况下没有区别。前缀
/
在xpath中表示“相对地从当前节点开始选择”。
xpathDoc = HttpHelper.HttpStream(xmlReq, sessionid);

XPathNavigator nav = xpathDoc.CreateNavigator();

XPathNodeIterator xmlIterator = nav.Select("/Envelope/Body/RESULT/");

var csv = new StringBuilder();

filePath = "C:\Campaigns.csv";

foreach (XPathNavigator node in xmlIterator)
{

string MailingId = node.SelectSingleNode("MailingId").Value;
string ReportId = node.SelectSingleNode("ReportId").Value;
string ScheduledTS = node.SelectSingleNode("ScheduledTS").Value;
string MailingName = node.SelectSingleNode("MailingName").Value;

string newLine = string.Format("{0},{1},{2},{3},{4}", MailingId, ReportId, ScheduledTS, MailingName, Environment.NewLine);
csv.Append(newLine);

}

File.WriteAllText(filePath, csv.ToString());
foreach (XPathNavigator node in nav.Select("/Envelope/Body/RESULT/Mailing"))
{
    string MailingId = node.SelectSingleNode("./MailingId").Value;
    // and so on