2017-07-18 12 views
1

私はHTMLAgilityPackを使用してXMLファイルを読み込んで読み込みます。ファイルがロードされた後、その値をデータベースに挿入します。C#最初の要素を返すXpathのみ

XMLは次のようになります。

<meeting> 
     <jobname></jobname> 
     <jobexperience></jobexperience> 
</meeting> 

私はここに見られるように、foreachループ内のXPath文を使用してこれを実現しようとしている:

DataTable dt = new DataTable(); 
//Add Data Columns here 
dt.Columns.Add("JobName"); 
dt.Columns.Add("JobExperience"); 

// Create a string to read the XML tag "job" 
string xPath_job = "//job"; 
string xPath_job_experience = "//jobexperience"; 


/* Use a ForEach loop to go through all 'meeting' tags and get the values 
    from the 'JobName' and 'JobExperience' tags */ 

foreach (HtmlNode planned_meeting in doc.DocumentNode.SelectNodes("//meeting")) 
{ 
    DataRow dr = dt.NewRow(); 

    dr["JobName"] = planned_meeting.SelectSingleNode(xPath_job).InnerText; 

    dr["JobName"] = planned_meeting.SelectSingleNode(xPath_job_experience).InnerText; 

    dt.Rows.Add(dr); 

}  

だから、問題はさらにforeachのかのことですループはすべての「会議」タグを通過していますが、最初の「会議」タグだけから値を取得しています。

ご協力いただければ幸いです!

+3

は、私はあなたのXPathクエリは、ちょうど 'ジョブ名であるべきだと思います'と' jobexperience'をスラッシュなしで使用しています。 –

+1

Yup xPath_ *変数にはスラッシュを使用できません。 – StuartLC

+0

XPathのチートシートについては、[この便利なページ](https://www.w3schools.com/xml/xpath_syntax.asp)を参照してください。 –

答えて

2

したがって、問題は、foreachループがすべての「会議」タグを通過しても、最初の「会議」タグからの値を取得することです。

はい、これがコードの機能です。 XPath operator //は、すべての要素を文書全体に選択します。 //jobすべてjob要素を文書全体で選択します。

だからあなたのforeachループであなたはその後

doc.DocumentNode.SelectNodes("//meeting")) 

で文書全体のすべてのmeetingの要素を選択し、 - ループで - あなたは

​​を持つすべての //jobと文書全体のすべての //jobexperienceの要素を選択します

すべての要素の最初の要素を繰り返し選択します。それで、あなたは最初の要素しか得られないという印象です。


ので(//オペレータを削除することによって)選択します現在meeting要素の子というように、コードを変更:

string xPath_job   = "job"; 
string xPath_job_experience = "jobexperience"; 
関連する問題