Получить родного брата от данного узла

У меня есть этот XML-файл:

 <material>
   <item>
      <name>theName1</name>
      <val1>1.1</val1>
      <val2>2.5</val2>
      <val3>5.2</val3>
   </item>
   <item>
      <name>theName2</name>
      <val1>2.1</val1>
      <val2>3.5</val2>
      <val3>6.2</val3>
   </item>
 </material>

Хорошо, теперь у меня есть 1 вещь: значение одного из узлов item > name (например: theName2), зная это, мне нужно выбрать его братьев и сестер (val1, val2...)

Любые идеи о том, как это сделать?


person matt    schedule 01.12.2012    source источник
comment
Что вы пробовали? Хотите поделиться кодом с нас, чтобы у нас была отправная точка для обсуждения? Сейчас ваш вопрос больше похож на: вот спецификации, дайте мне код.   -  person Darin Dimitrov    schedule 02.12.2012
comment
У меня есть это: XmlDocument myXML = new XmlDocument(); myXML.Load(файл.xml); var nodes = myXML.SelectSingleNode(потомок:материал[item/name=''theName1]); Вот где я теряюсь, я думаю, что это выбор правильного узла, но я не уверен, как получить братьев и сестер.   -  person matt    schedule 02.12.2012
comment
Непонятно, что вы пытаетесь заархивировать, смотрите мой ответ. Я обновлю его, если вы добавите больше деталей   -  person illegal-immigrant    schedule 02.12.2012


Ответы (3)


После загрузки вашего xml в XmlDocument выполните:

document.SelectSingleNode("/material/item[val1='2']/name").InnerText

Это то, что тебе надо..?

person Anujith    schedule 01.12.2012
comment
Что вы подразумеваете под val1='2' ? - person matt; 02.12.2012
comment
document.SelectSingleNode(/node1/innernode[input-node='value']/requiredNode).InnerText - person Anujith; 02.12.2012
comment
Отлично!, это все, что мне нужно - person matt; 02.12.2012

Немного XPath + Linq может помочь

var xDoc = XDocument.Parse(xml); //OR XDocument.Load(filename);
string xpath = String.Format("//item[name[text()='{0}']]","theName2");

var dict = xDoc.XPathSelectElement(xpath).Descendants()
            .Where(d=>d.Name.LocalName!="name")
            .ToDictionary(x=>x.Name.LocalName,x=>(decimal)x);
person L.B    schedule 01.12.2012

    var doc = XDocument.Parse(Xml); //create XDocument from string
    var items = doc.Descendants("item"); //select all 'item' elements
    foreach (var item in items)
    {
        var childs = item.Elements().Skip(1); //skip <name> element
        foreach (var child in childs)
            Console.WriteLine(child); // val1, val2, val3, etc
    }

Чтобы выбрать все элементы «имя»:

    var names = doc.Descendants("name");
    foreach (var name in names)
        Console.WriteLine(name);
person illegal-immigrant    schedule 01.12.2012