Проблема XmlNodeList SelectNodes - PullRequest
       37

Проблема XmlNodeList SelectNodes

1 голос
/ 23 октября 2011

Я пытаюсь проанализировать 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 ]

1 голос
/ 23 октября 2011

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

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

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

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

1 голос
/ 23 октября 2011

Учитывайте пространство имен:

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