Проблема XmlNodeList SelectNodes

Я пытаюсь разобрать xml файл

Мой код выглядит так:

 string path2 = "xmlFile.xml";
 XmlDocument xDoc = new XmlDocument();
 xDoc.Load(path2);
 XmlNodeList xnList = xDoc.DocumentElement["feed"].SelectNodes("entry");

Но не могу получить список узлов. Я получаю сообщение об ошибке: "Используйте ключевое слово" new "для создания экземпляра объекта". и он, кажется, находится на "SelectNodes (" entry ")". Этот код работал, когда я загружал XML из RSS-канала, но не из локального файла. Можете ли вы сказать мне, что я делаю не так?

Мой XML выглядит так:

<?xml version="1.0"?>
 <feed xmlns:media="http://search.yahoo.com/mrss/" xmlns:gr="http://www.google.com/schemas/reader/atom/" xmlns:idx="urn:atom-extension:indexing" xmlns="http://www.w3.org/2005/Atom" idx:index="no" gr:dir="ltr">
  <entry gr:crawl-timestamp-msec="1318667375230">
   <title type="html">Title 1 text</title>
   <summary>summary 1 text text text</summary>
  </entry>
  <entry gr:crawl-timestamp-msec="1318667375230">
   <title type="html">title 2 text</title>
   <summary>summary 2 text text text</summary>
  </entry>
 </feed>

2 ответа

Решение

Возьмите пространство имен в учетную запись:

XmlNamespaceManager mgr = new XmlNamespaceManager(XDoc.NameTable);
mgr.AddNamespace("atom", "http://www.w3.org/2005/Atom");
XmlNodeList xnList = xDoc.SelectNodes("//atom:entry", mgr);

Это самый печально известный FAQ о XPath - это ссылки на имена элементов, которые находятся в пространстве имен по умолчанию.

Краткий ответ: найдите "пространство имен XPath по умолчанию" и поймите проблему.

Тогда используйте XmlNamespaceManager экземпляр, чтобы добавить связь между префиксом (скажем, "x") и пространство имен по умолчанию (в вашем случае "http://www.w3.org/2005/Atom").

Наконец, замените любой Name с x:Name в вашем выражении XPath.

Другие вопросы по тегам