Использование XPath и VB.NET для анализа XML, содержащего пространства имен

Есть несколько смежных вопросов, но ни один из них не дает нужных мне рекомендаций.

Предполагая следующий XML:




This is the title
lorem ipsum


This is the second title
lorem ipsum 2


Если бы в этом документе не было пространств имен, я мог бы написать такой код:

Public Sub ShowXML(XmlText As String)
    Dim doc As New XmlDocument
    doc.LoadXml(XmlText)
    For Each Entry As XmlNode In doc.SelectNodes("//entry")
        Console.WriteLine(Entry.SelectSingleNode("title").InnerText)
    Next
End Sub

Из-за пространств имен это невозможно. Это моя последняя попытка:

Public Sub ShowXML(XmlText As String)
    Dim doc As New XmlDocument
    doc.LoadXml(XmlText)
    Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
    nsmgr.AddNamespace("rss", "http://www.w3.org/2005/Atom")
    For Each Entry As XmlNode In doc.SelectNodes("//rss:entry")
        Console.WriteLine(Entry.SelectSingleNode("/rss:title").InnerText)
    Next
End Sub

Какой правильный синтаксис XPath, чтобы получить "заглавие"?

Причины, по которым это отдельный вопрос по другим темам:

Большинство других примеров - C #, и я ищу решение VB.NET.Другие примеры не касаются сценария перехода к узлу из ранее выбранного узла.

Я не ищу решение, которое лишает пространства имен; Я хочу понять их. Спасибо.

Ответы на вопрос(1)

Решение Вопроса

Ваш внутренний XPath,/rss:titleимеет ведущий/ это означает, что этот поиск должен начинаться с верхней части документа, независимо от того, что вы в данный момент находитесь на дочернем узле

Вместо этого просто используйтеrss:title и ты'Я получу узел, который вы ищете.

 Dave Michener06 июн. 2013 г., 16:33
@DWRoelands - согласен. Я нене понимаю, почему они сделали поиск по пространству имен по умолчанию настолько сложным, когдасдефолт Пространство имен. Oi!
 DWRoelands06 июн. 2013 г., 15:08
Спасибо, Дэйв. Возможно, однажды я преодолею свою ненависть к пространствам имен XML. :)

Ваш ответ на вопрос