2010-09-01 28 views
1

Je XML follwing:VB.NET: problème XPath

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

Et le code:

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 

Je veux obtenir dans la première itération "automática" puis, dans la dernière un "diária". Qu'est-ce qui ne va pas? Comment pourrais-je résoudre cela? Je vous remercie.

Répondre

1

Essayez

 
/configuracoes/gerais/atualizacoes/* 

Le Value d'un nœud est toujours la valeur concatented de tous les nœuds texte descendant. Ceci est à HTML analogue, où la valeur de

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

est "This is some bold text.".

Si vous voulez les valeurs individuelles, sélectionnez les nœuds individuellement. Dans votre cas, comme ils ont des noms différents, j'ai utilisé le *.

+0

Oui, vous avait raison. Merci beaucoup. – thomas

+0

+1 Bonne explication. –

0

Une autre considération à venir est d'utiliser LINQ vers XML plutôt que XPath. D'après mon expérience, il est beaucoup plus facile d'utiliser et de naviguer dans le XML via des requêtes que de l'itérer à travers XPath. Pour référence ultérieure jeter un oeil sur le lien ci-dessous:

Vue d'ensemble de LINQ to XML dans Visual Basic:
http://msdn.microsoft.com/en-us/library/bb384460.aspx

+1

Je pense que ce n'est pas une bonne pratique de répondre à une question étiquetée XPath avec une recommandation d'utiliser une bibliothèque verrouillée par le fournisseur ... –

+0

C'est bien comme votre opinion et j'ai le mien. Ce post est tagué avec '.NET' et 'VB.NET' alors rappelez-vous que l'utilisation de LINQ dans le monde et le domaine des applications .NET serait beaucoup plus populaire de nos jours à XPath, et pourrait aider l'OP à faire les choses plus facilement. En fait, si vous faites référence à la bibliothèque "Vendor Locked" parce qu'elle se trouve dans le .NET Framework, vous ne pouvez même pas créer une application VB.NET sans déjà utiliser une douzaine de ces bibliothèques "Vendor Locked". – atconway