2011-08-05 2 views
4

이 xml 파일 "target.xml":XPathNavigator.SelectSingleNode (string xpath)를 사용하여 노드를 선택하는 방법?

<World> 
    <Nkvavn> 
    <Rcltwkb> 
     <Pjwrgsik /> 
     <Nemscmll /> 
     <Fnauarnbvw /> 
     <Egqpcerhjgq /> 
     <Olyhryyxi /> 
     <Vvlhtiee /> 
     <Wlsfhmv /> 
    </Rcltwkb> 
    <Xudbhnakjb> 
     <Cwxjtkteuji /> 
     <Fbtcvf /> 
     <Uviaceinhl /> 
    </Xudbhnakjb> 
    <Kgujcymilwr> 
     <Nlbvgtwoejo /> 
     <Tvufkvmryybh /> 
     <Xtomstcenmp /> 
     <Mhnngf /> 
     <Fjidqdbafxun /> 
    </Kgujcymilwr> 
    <Taiyiclo> 
     <Fiecxoxeste /> 
     <Loqxjq /> 
     <Vfsxfilxofe /> 
     <Hroctladlht /> 
    </Taiyiclo> 
    </Nkvavn> 
    <Tfrosh> 
    <Tuqomkytlp> 
     <Oyvivlvminhn /> 
     <Qeypvfgul /> 
     <Mbapjl /> 
    </Tuqomkytlp> 
    <Rvxumtj> 
     <Gkvigncdvgy /> 
     <Okcddyi /> 
     <Vvmacul /> 
    </Rvxumtj> 
    <Pdjpgexuyc> 
     <Yvsdmbckurju /> 
     <Bvkxvg /> 
     <Clmrvjwk /> 
     <Hdafjhydj /> 
     <Asauxtnoe /> 
     <Mwcviwmi /> 
    </Pdjpgexuyc> 
    </Tfrosh> 
</World> 

BindCities (string country) 메서드에서 country 요소() 얻으려고하지만 nav 변수를 값을 변경하지 않습니다. country 요소를 사용하여 코드를 실행하면 마지막 위치에 머무르게됩니다. 나는 많은 방법을 시도했지만 아무 것도 효과가 없었다.

using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 
using System.Xml; 
using System.Xml.XPath; 

namespace MultipleBoundListBox 
{ 
    public partial class Form1 : Form 
    { 
     private static XmlDocument xmlDoc; 
     private static XPathNavigator nav; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      xmlDoc = new XmlDocument(); 
      xmlDoc.Load(@"target.xml"); 

      nav = xmlDoc.DocumentElement.CreateNavigator(); 

      nav.MoveToFirstChild(); 
      var countries = new List<string>(); 
      countries.Add(nav.LocalName); 

      while (nav.MoveToNext()) 
      { 
       countries.Add(nav.LocalName); 
      } 

      listBox1.DataSource = countries; 

      BindCities(countries[0]); 
     } 

     protected void BindCities(string country) 
     { 
      nav.MoveToRoot(); 
      var xpath = "//" + country; 
      nav.SelectSingleNode(xpath); 
      nav.MoveToFirstChild(); 

      var cities = new List<string>(); 
      cities.Add(nav.LocalName); 

      while (nav.MoveToNext()) 
      { 
       cities.Add(nav.LocalName); 
      } 

      listBox2.DataSource = cities; 
     } 
    } 
} 

탐색 XPathNavigator로 country 요소에 도달하려면 어떤 코드가 필요합니까?

답장을 보내 주셔서 감사합니다!

+0

, 나는 심지어 국가 요소를 볼 수 없습니다! :) –

+0

BindCities()의 country 매개 변수에 포함 된 문자열의 이름을 가진 요소의 국가 요소 :이 경우 해당 값은 countries [0]이며 "Nkvavn"입니다. –

+0

또한 XPathVisualizer! http://xpathvisualizer.codeplex.com/releases/66455/download/240321 –

답변

5

SelectSingleNode 방법의 적절한 사용은 : 나는 균열 흡연, 될 수 있지만

XPathNavigator node = nav.SelectSingleNode(xpath); 
if (node != null) { 
    // now access properties of node here e.g. node.LocalName 
} 
else { 
    // if needed handle case that xpath did not select anything 
} 
+0

괜찮아, 알아, 내가 생각 nav.SelectSingleNode (xpath); 선택된 노드로 이동을 이동하지만 실제로 그것을 반환합니다 :) 도움 +1을 주셔서 감사합니다 –

관련 문제