2014-02-25 44 views
2

我已經看到多個帖子,但由於某些原因,我嘗試返回一個空的XmlNodeList。我錯過了什麼?使用XPath選擇XMLNode

我的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; 

我已經嘗試的 「/串/包/業績/ ResumeResultItem_V3」 許多變化都無濟於事。 ws是第三方,所以我無法控制XML的格式。提前Thanx。

回答

1

你需要在你SelectNodes呼叫namespacemanager,因爲你的XML根節點有一個命名空間http://ws.jobboard.com/resumes/

請注意,您的XPath需要明確地使用命名空間別名。

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 
}