2012-05-10 1 views
0

Программирование на C# У меня есть объект Xml.XpathNodeList "ResultsPartRel.nodeList". Отладка его с Visual Studio я могу читать «Просмотр результатов; Расширение Посмотреть результаты будут перечислять IEnumerable»Как читать XPathNodelist

Вопросы:

1.- Что является лучшим способом, чтобы прочитать эти узлы?

2.- Я программирую следующий код, но я не получаю ожидаемых результатов. Я получаю тот же результат дважды. (ResultsPartRel.nodeList содержит 2 узла)

  List<string> childrenName = new List<string>(); 

     foreach (XmlElement node in ResultsPartRel.nodeList) 
     { 
      string nameChildren = node.SelectSingleNode("//related_id/Item/keyed_name").InnerText; 
      childrenName.Add(nameChildren); 
     } 

Благодарим вас заблаговременно.

EDIT

<related_id> 
    <Item> 
    <classification>Component</classification> 
    <id></id> 
    <keyed_name>glass</keyed_name> <!-- I want to get this InnerText --> 
    </Item> 
</related_id> 
<source_id>968C45A47942454DA9B34245A9F72A8C</source_id> 
<itemtype>5E9C5A12CC58413A8670CF4003C57848</itemtype> 

ответ

1

Ну, нам действительно нужно увидеть образец XML и словесное объяснение того, какие данные вы хотите извлечь. В настоящее время вы делаете node.SelectSingleNode(...), чтобы выглядеть так, как будто вы хотите выбрать путь относительно node, но затем вы используете абсолютный путь, начинающийся с //, поэтому вы получаете тот же результат дважды.

Так вы хотите node.SelectSingleNode(".//related_id/Item/keyed_name") или, возможно, даже node.SelectSingleNode("related_id/Item/keyed_name"), в зависимости от вашего XML.

+0

Когда 'node.SelectSingleNode (" related_id/Item/keyed_name ")' Я не получаю никакого результата. Вот почему 'node.SelectSingleNode (" // related_id/Item/keyed_name ")' Я редактирую свой вопрос с помощью XMLNode – kmxillo

+0

Просьба также показать, где и как вы инициализируете 'ResultsPartRel.nodeList', чтобы мы знали контекстный узел, который вы называете' SelectSingleNode' на. –

+0

'ResultsPartRel' - это объект из фабричного класса, который основан на XML. 'Item ResultsPartRel = ResultsPartObj.getRelationships();' Я не знаю, что еще я могу показать, чтобы прояснить мою проблему. – kmxillo

0

Вы можете получить первый элемент. (С «//» означает поиск всех следующих тегов, поэтому вы, вероятно, получите больше результатов). Когда вы хотите, чтобы первый элемент записывал «// related_id/Item/keyed_name» 1 * ".

Или вы можете написать точный путь. (Это самый безопасный способ). Чтобы облегчить для себя, есть расширение Firefox xPath Checker загрузите документ в firefox, чем щелкните правой кнопкой мыши элемент и покажите Xpath. Затем вы получите точный путь.

+0

Мои проблемы в том, что я просто получаю первый элемент в foreach. Имя файла дублируется. – kmxillo