2016-04-06 8 views
1

"dinamik" düğümlerle bir xml belgeyi çözümler?, bütün dilleri Retreive nasıl, yani <code><en></code> veya <code><de></code> veya <code><CodeCountry></code> ve bunların alt öğelerini Bir <code>XDocument</code> aracılığıyla XML ayrıştırma am

<en> 
    <descriptif>In the historic area, this 16th century Town House on 10,764 sq. ft. features 10 rooms and 3 shower-rooms. Period features include a spiral staircase. 2-room annex house with a vaulted cellar. Period orangery. Ref.: 2913.</descriptif> 
    <prox>NOGENT-LE-ROTROU.</prox> 
    <libelle>NOGENT-LE-ROTROU.</libelle> 
</en> 
<de> 
    <descriptif>`enter code here`In the historic area, this 16th century Town House on 10,764 sq. ft. features 10 rooms and 3 shower-rooms. Period features include a spiral staircase. 2-room annex house with a vaulted cellar. Period orangery. Ref.: 2913.</descriptif> 
    <prox>NOGENT-LE-ROTROU.</prox> 
</de> 
... 
<lang> 
    <descriptif></descriptif> 
    <prox></prox> 
    <libelle></libelle> 
</lang> 
+0

do edebilir, dinamik balise – user1428798

+0

Are tüm ** ** xml kökündeki düğüm ** ** eşi bir ** ** var mı? –

+0

Sorunuzun metnini kod bloğunun yukarısına çektim, bu da yanıtlayanların soruyu taramasını ve bir cevabı düşünmesini kolaylaştırıyor - Bottom Line Up Front adlı bir teknik. Umarım aradığınız cevabı almanıza yardımcı olur. –

cevap

0

Xml belgeniz iyi biçimlendirilmemiş olduğundan, önce bir kök öğesi eklemelisiniz. Böyle bir şey yapabilirsiniz. Eğer "dinamik üst düğümleri" sahip olarak

var content = File.ReadAllText(@"<path to your xml>"); 
var test = XDocument.Parse("<Language>" + content + "</Language>"); 

Ardından, tüm düğümlerin en az bir "descriptif" çocuk sahibi varsayarak (dinamik olarak görünmüyor) çocukları ile çalışmak çalışabilir. ("Descriptif" değilse, "prox" veya "libelle" olabilir) **. Bu dili ve çocukları seçebilirsiniz. Daha sonra dili ve çocukları seçebilirsiniz. Anonim bir yazı kullandım, tabii ki özel bir sınıfa proje yapabilirsiniz.

var allNodes = parents.Select(m => new 
      { 
       name = m.Name.LocalName, 
       Descriptif = m.Element("descriptif") == null ? string.Empty : m.Element("descriptif").Value, 
       Prox = m.Element("prox") == null ? string.Empty : m.Element("prox").Value , 
       Label = m.Element("libelle") == null ? string.Empty : m.Element("libelle").Value 
      }); 

Bu tabii ki büyük bir dosya için performans kodu değil, başka bir sorun. , L tüm diliyle olmalıdır


** En kötü durum, bazen ben veya veya sahip

var parents = test.Descendants("descriptif").Select(m => m.Parent) 
       .Union(test.Descendants("prox").Select(m => m.Parent)) 
       .Union(test.Descendants("libelle").Select(m => m.Parent));