VB.NET: проблема с XPath

У меня есть следующий XML:

<?xml version="1.0" encoding="utf-8" ?>
<configuracoes>
  <gerais>
    <atualizacoes>
      <tipo>automática</tipo>
      <frequencia>diária</frequencia>
    </atualizacoes>
  </gerais>
</configuracoes>

И код:

Dim xPathNavigator As XPathNavigator
Dim xPathNodeIterator As XPathNodeIterator

xPathNavigator = Me.XML.CreateNavigator()
xPathNodeIterator = xPathNavigator.Select("/configuracoes/gerais/atualizacoes")

While (xPathNodeIterator.MoveNext())
    Dim xPathNavigatorInterno As XPathNavigator = xPathNodeIterator.Current
    MsgBox(xPathNavigatorInterno.Value) 'It Shows "automáticadiária" instead of "automática" and then "diária" in the next iteration...
End While

Я хочу пройти первую итерацию "automática", а затем, в последней, "diária". Что случилось? Как я мог это решить? Спасибо.


person thomas    schedule 01.09.2010    source источник


Ответы (2)


Пытаться

/configuracoes/gerais/atualizacoes/*

Value узла всегда является конкатенированным значением всех дочерних текстовых узлов. Это аналогично HTML, где значение

<div>This is some <b>bold</b> text.</div>

is "This is some bold text.".

Если вам нужны отдельные значения, выберите отдельные узлы явно. В вашем случае, поскольку у них разные имена, я использовал *.

person Tomalak    schedule 01.09.2010

Еще одно соображение в будущем — использовать LINQ to XML, а не XPath. По моему опыту, гораздо проще использовать и перемещаться по XML с помощью запросов, чем повторять его, как это делает XPath. Для дальнейшего использования взгляните на ссылку ниже:

Обзор LINQ to XML в Visual Basic:
http://msdn.microsoft.com/en-us/library/bb384460.aspx

person atconway    schedule 03.09.2010
comment
Я думаю, что не рекомендуется отвечать на вопросы с тегами XPath с рекомендацией использовать библиотеку, заблокированную поставщиком... - person ; 03.09.2010
comment
Это прекрасно, как ваше мнение, и у меня есть мое. Этот пост отмечен тегами «.NET» и «VB.NET», поэтому помните, что использование LINQ в мире и области приложений .NET в настоящее время было бы гораздо предпочтительнее, чем XPath, и могло бы помочь OP сделать что-то проще. На самом деле, если вы имеете в виду библиотеку с блокировкой поставщика, потому что она находится в .NET Framework, вы даже не можете создать приложение VB.NET, не используя уже дюжину этих так называемых библиотек с блокировкой поставщика. - person atconway; 04.09.2010