2013-07-05 2 views
1

Как я могу выбрать конкретный узел в моем XML файлах?Прочитать конкретный узел XML

В моем первом foreach я выбираю каждый Property, что внутри моего Properties тега, но я хочу конкретный Property. A Property, который имеет, например, <PropertyCode>.

XML

<Carga> 
    <Properties> 
     <Property> 
      <PropertyCode>122</PropertyCode> 
      <Fotos> 
       <Foto> 
       </Foto> 
      </Fotos> 
     </Property> 
     <Property> 
      <PropertyCode>123</PropertyCode> 
      <Fotos> 
       <Foto> 
       </Foto> 
      </Fotos> 
     </Property> 
    </Properties> 
</Carga> 

C# Код

// Here I get all Property tag 
// But i want to take just a specific one 
foreach (XmlElement property in xmldoc.SelectNodes("/Carga/Properties/Property")) 
{ 
    foreach (XmlElement photo in imovel.SelectNodes("Fotos/Foto")) 
    { 
     string photoName = photo.ChildNodes.Item(0).InnerText.Trim(); 
     string url = photo.ChildNodes.Item(1).InnerText.Trim(); 
     this.DownloadImages(property_id, url, photoName); 
    } 
} 

Кто-то может мне помочь?

ответ

3

Использование Linq to Xml:

int code = 123; 
var xdoc = XDocument.Load(path_to_xml); 
var property = xdoc.Descendants("Property") 
        .FirstOrDefault(p => (int)p.Element("PropertyCode") == code); 

if (property != null) 
{ 
    var fotos = property.Element("Fotos").Elements().Select(f => (string)f); 
} 

fotos будет коллекция строк.

+0

с 'XMLDocument' может Я делаю это ? –

+0

@ Lucas_Santos вы можете, но почему бы вам? Linq to Xml дает вам хороший строго типизированный синтаксический анализ –

+0

В первый момент я хотел бы работать с 'XMLDocument', потому что мой файл' XML' намного больше, чем этот образец, который я положил. Поэтому, когда я обновляю версию своего приложения, я могу перейти на «XDocument» –

1

Вы можете использовать выражение предиката в вашем XPath, чтобы выбрать конкретные узлы .. что-то вроде этого:

XmlNodeList nl = xmldoc.SelectNodes("/Carga/Properties/Property[PropertyCode='123']/Fotos/Foto"); 
foreach(XmlNode n in nl) { ... } 

Смотрите здесь для быстрой ссылки на синтаксис XPath: http://www.w3schools.com/xpath/xpath_syntax.asp

+0

+1 от меня, но я бы предпочел использовать расширения XPath для XDocument –

Смежные вопросы