2009-06-03 4 views
3

xmlドキュメントをループするtryngです。まだ2番目の繰り返しで最初の要素が表示されています。誰も助けることができますか? XpathはxPathを使用してアイテムをループする

string file = HttpContext.Current.Server.MapPath("~/XML/Locations.xml"); 

    Dictionary<string, Location> locationCollection = new Dictionary<string, Location>(); 

     XPathDocument xDocument = new XPathDocument(file); 
     XPathNavigator xPathNavigator = xDocument.CreateNavigator(); 

     foreach (XPathNavigator node in xPathNavigator.Select("//locations/*")) 
     { 
      string value = node.SelectSingleNode("/locations/location/cell").Value; 
     } 



    <?xml version="1.0" encoding="utf-8" ?> 
<locations> 
    <location> 
    <locationName>Glendale</locationName> 
    <street>3717 San Fernando Road</street> 
    <city>Glendale</city> 
    <state>CA</state> 
    <zipcode>91204</zipcode> 
    <generalManager>DJ Eldon</generalManager> 
    <phone>(818) 552‐6246</phone> 
    <tollFree>(888) 600‐6011</tollFree> 
    <fax>(818) 552‐6248</fax> 
    <cell>(347) 834‐2249</cell> 
    <counterEmail>[email protected]</counterEmail> 
    <directEmail>[email protected]</directEmail> 
    </location> 
    <location> 
    <locationName>Chicago</locationName> 
    <street>1301 S. Harlem Ave.</street> 
    <city>Chicago</city> 
    <state>IL</state> 
    <zipcode>60402</zipcode> 
    <generalManager>Dave Schnulle</generalManager> 
    <phone>(708) 749‐1500</phone> 
    <tollFree>(888) 966‐1500</tollFree> 
    <fax>(818) 552‐6248</fax> 
    <cell>(708) 749‐3800</cell> 
    <counterEmail>[email protected]</counterEmail> 
    <directEmail>[email protected]</directEmail> 
    </location> 
</locations> 

答えて

11

あなたが効果的に戻ってドキュメントルートに取得するには先頭のスラッシュを使用してnodeの値を無視しているとかなり新しいです。代わりにこれを試してみてください:

// This assumes that there are only location nodes under locations; 
// You may want to use //locations/location instead 
foreach (XPathNavigator node in xPathNavigator.Select("//locations/*")) 
{ 
    string value = node.SelectSingleNode("cell").Value; 
    // Use value 
} 

あなたは、単一のXPathクエリでそれをやっていない何らかの理由がある、と言いましたか?

// Name changed to avoid scrolling :) 
foreach (XPathNavigator node in navigator.Select("//locations/location/cell")) 
{ 
    string value = node.Value; 
    // Use value 
} 
+0

ありがとう、これはうまくいきました...はい、コレクションにマルチプル値を追加するため、単一のxpathを実行していない理由があります。 もう一度おねがいします! – BoredOfBinary

0

次のことを試してみてください。

XPathNodeIterator ni = xPathNavigator.Select("//locations/*"); 
while (ni.MoveNext()) 
{ 
    string value = ni.Current.Value); 
} 

だけで簡単に口走る、それはあなたを助け願っています。

あなたがすべき
0

string value = node.SelectSingleNode("./cell").Value; 

あなたはダウンだけで一つの要素を移動する必要があるので、あなたは、あなたはすでに内部/場所/場所xPathNavigator.Select(「//場所/ *」))していますかノード、あなたの例のセル。

関連する問題