c# - 使用 XPath 选择 XMLNode

标签 c# xml

我已经看到关于此示例的多个帖子,但出于某种原因,我尝试的所有选项都返回一个空的 XmlNodeList。我错过了什么?

我的 XML:

<string xmlns='http://ws.jobboard.com/resumes/'>
<Packet>
<Errors />
<PageNumber>1</PageNumber>
<SearchTime>02/25/2014 10:11:47</SearchTime>
<FirstRec>1</FirstRec>
<LastRec>100</LastRec>
<Hits>206816</Hits>
<MaxPage>40</MaxPage>
<Results>
  <ResumeResultItem_V3>
    <ContactEmail></ContactEmail>
    <ContactName>Lisa Yada</ContactName>
    <HomeLocation>US-CO-Lakewood</HomeLocation>
    <LastUpdate>2014/2/24</LastUpdate>
    <ResumeTitle>Web Design &amp; Developement</ResumeTitle>
    <JobTitle>Web Design &amp; Developement</JobTitle>
    <RecentEmployer>Some Company</RecentEmployer>
    <RecentJobTitle>Web Design</RecentJobTitle>
    <RecentPay>0</RecentPay>
    <ResumeID>RHV47X78Z5CN56</ResumeID>
    <UserDID>UHT6R86LL8C581</UserDID>
    <ContactEmailMD5>93ce261b843f58962f9</ContactEmailMD5>
    <ActionType />
    <HighestDegree>Bachelor's Degree</HighestDegree>
    <MonthsOfExperience>40</MonthsOfExperience>
    <LastActivity>2/24/2014 1:22:19 PM</LastActivity>
  </ResumeResultItem_V3> ...

和我的代码:

                XmlDocument jobsdoc = new XmlDocument();
                    jobsdoc.LoadXml(xmlstring);

                    XmlNodeList xnList = jobsdoc.SelectNodes("/string/Packet/Results/ResumeResultItem_V3");
                    foreach (XmlNode xn in xnList)
                    {
                        DataRow dr = table.NewRow();
                        dr["ContactName"] = xn["ContactName"].InnerText;
                        dr["ResumeTitle"] = xn["ResumeTitle"].InnerText; 
                        ...
                        table.Rows.Add(dr);
                    }

                    return table;

我尝试了“/string/Packet/Results/ResumeResultItem_V3”的多种变体,但都无济于事。 ws 是第三方所以我无法控制 XML 的格式。提前致谢。

最佳答案

你需要一个 namespacemanager在你的SelectNodes调用是因为你的 xml 根节点有一个命名空间 http://ws.jobboard.com/resumes/

请注意,您的 XPath 需要明确使用 namespace 别名。

NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
nsmgr.AddNamespace("r", "http://ws.jobboard.com/resumes/");

XmlDocument jobsdoc = new XmlDocument(nt);
jobsdoc.LoadXml(xmlstring);

var xnList = jobsdoc.SelectNodes(
                "/r:string/r:Packet/r:Results/r:ResumeResultItem_V3",
                nsmgr);
foreach (XmlNode xn in xnList)
{
    // rest of your code
}

关于c# - 使用 XPath 选择 XMLNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22023817/

相关文章:

c# - 是否有理由在 Try/Catch 上使用带有 ExceptionThrown 变量的 Try/Finally

c# - 在 switch case 中,如果我们将 "default"写为任何单词或单个字母,它不会抛出错误

c# - 对负整数返回零

c# - 在 ASP.NET/C# 中使用 GDI+ 裁剪图像时抗锯齿?

java - 将 POJO 转换为 XML

c# - 使用索引选择 XML 元素

javascript - Blazor在一键onclick事件中执行C#和JS函数

javascript - 如何在 Odoo 14 中搜索 res.partner 记录

java - applicationContext.xml 文件有什么问题

java jdbc xml sql 条件与 cdata