2011-02-14 27 views
22

Her düğümde <username>Ed</username> değerini almak için xml belgesinin düğümleri boyunca yinelemeye çalışıyorum. İlk önce XDocument'i sıralamak için Linq kullanıyorum, sonra düğümler arasında geçiş yapmaya çalışıyorum. Bunu başarmak için doğru foreach döngüsünü bulamıyorum. Herhangi bir yardım takdir edilir.Bir XDocument Düğümü aracılığıyla yineleme nasıl yapılır

var doc = XDocument.Load("files\\config.xml"); 
var newDoc = new XDocument(new XElement("Config", 
      from p in doc.Element("Config").Elements("Profile") 
      orderby int.Parse(p.Element("order").Value) 
      select p)); 


foreach (XElement xe in newDoc.Nodes()) 
{ 
    MessageBox.Show(xe.Element("username").Value); 
} 

// XML document 
<Config> 
<Profile> 
    <id>Scope</id> 
    <username>Scope 1</username> 
    <password>...</password> 
    <cdkey>0000</cdkey> 
    <expkey></expkey> 
    <cdkeyowner>Scope</cdkeyowner> 
    <client>W2BN</client> 
    <server>[IP]</server> 
    <homechannel>Lobby</homechannel> 
    <load>1</load> 
    <order>2</order> 
</Profile> 
<Profile> 
    <id>Scope 2</id> 
    <username>Scope 2</username> 
    <password>...</password> 
    <cdkey>0000</cdkey> 
    <expkey></expkey> 
    <cdkeyowner>Scope</cdkeyowner> 
    <client>W2BN</client> 
    <server>[IP]</server> 
    <homechannel>Lobby</homechannel> 
    <load>1</load> 
    <order>1</order> 
</Profile> 
</Config> 
+0

size (özet) şema gönderebilir miyim veya bir (kısaltılmış) örneği dosya mi? –

+0

emin, ' Ed 2 Ed code'' Hata ayıklama modunda çalıştırın burada bir kesme noktası yerleştirme ve ardından 'newDoc incelemek gerekir –

+0

code' Nesne sorgulamak için doğru XML özelliklerini belirlemek için. –

cevap

39

Bunu deneyin. Neden ikinci doktora ihtiyacınız olduğundan emin değilsiniz.

foreach (XElement xe in doc.Descendants("Profile")) 
{ 
    MessageBox.Show(xe.Element("username").Value); 
} 
+0

olmalıdır. 2. doc, kodumdaki ilk kodu" "şemasına göre sıralamaktır. Bu işe yaramaz. Ancak bu, her düğümün döngü ve değer elde etmenin bir yoludur. Düğümdeki tüm elemanlar için? (Şemam kısaltılır, her bir düğüm erişmem gereken yaklaşık 10 öğeye sahiptir.) –

+0

tam şemayı yayınlayın, ya da ilgili olduğu kadar. Aksi takdirde, ne yapmaya çalıştığınızı tahmin etmek zordur. –

+0

tam şemasını yayınladı Temelde her 'code' düğümü arasında döngü yapmalı ve içindeki her elemanın değerini almalıyım. –

4

Bir XPathDocument ve bir XPath ifadesinin kullanılması daha kolay.

var doc = new XPathDocument("files\\config.xml") 
foreach (var username in doc.CreateNavigator().Select("//username") 
{ 
    ... 
} 
0

Eğer iç düğüm arıyorsanız eleman elemanı vardır için, yani yinelemeli gibi kontrol edebilirsiniz. Örneğin Eğer veritabanından sizin xml okuma Assum

string xmlRoot = "select XmlItem from db"; 
XDocument doc = XDocument.Parse(xmlRoot); 
List<XElement> xElementList = doc.Descendants().Tolist(); 
foreach(XElement element in xElementList) 
{ 
    // read the element and do with your node 
    if(element.HasElements) 
    { 
     // here you can reach nested node 
    } 

} 
İlgili konular