2009-09-24 10 views
0

HI,VB.NET XML Parser - Trouver des éléments avec des attributs spécifiques et la valeur

J'utilise VB.NET pour lire un fichier XHTML. J'ai besoin de mon programme pour trouver tous les éléments de la structure XML dont l'attribut "class" est défini sur une valeur spécifique.

IE: J'ai besoin d'un tableau (ou d'une liste similaire) de tous les éléments du document contenant class = "mytag".

Il y a une liste de plusieurs valeurs que je dois détecter, toutes commençant par le même mot 'mytag' suivi d'un autre mot - donc l'utilisation d'une fonction "contains" semble raisonnable ici.

Toute suggestion de façon d'analyser ces attributs serait appréciée. À la vôtre.

Répondre

3

utiliser l'expression suivante XPath avec la fonction d'un objet SelectNodesXmlDocument:

//*[@class="mytag"] 

Cette expression permet de sélectionner un élément XHTML dont class valeur de l'attribut est égale à "mytag".

Si vous voulez trouver tous les éléments dont class attribut contient une chaîne particulière, la fonction XPath contains vous aidera:

//*[contains(@class,"mytag")] 

La fonction SelectNodes retourne une liste de nœuds XML à partir du XmlDocument correspondant au XPath expression passée à lui en tant que paramètre. Basé sur votre description, c'est exactement ce dont vous avez besoin.

+0

Cela a fonctionné parfaitement! Merci. J'ai cependant des problèmes avec le chargement de mon document xml. le lecteur xml essaie de valider le fichier XML à l'aide de la DTD. Cela signifie un voyage supplémentaire sur le site Web du W3C sur les temps de traitement de ralentissement de la charge. Si, cependant, je place le XMLresolver du lecteur à Nothing, analyse des plantages parce que le document contient des choses comme   et © Comment puis-je charger le xmldocument sans cette validation, tout en autorisant le & nbsp et & copy etc? Merci. –

+0

@Jack Hayter: Vous devriez être capable de regarder dans la propriété 'XmlReader.Settings.ValidationFlags', qui vous permet de choisir quelles validations, le cas échéant, sont effectuées sur le XML lors de sa lecture. Voir ceci pour plus d'informations sur 'ValidationFlags': http://msdn.microsoft.com/fr-fr/library/system.xml.xmlreadersettings.validationflags.aspx – Welbog

1

Si vous êtes OK avec LINQ essayez littéraux XML,

Comme ceci:

Dim nodes = From currentNode In XmlDoc...<your-node-name> 

For Each node As XElement In nodes 

Console.Writeline(node.Attribute("attr-name").Value()) 

Next 
Questions connexes