2010-09-06 10 views
1

Je dois obtenir une liste d'étiquettes contenant un attribut spécifique. J'utilise DITA XML et j'ai besoin de trouver toutes les balises qui ont un attribut href.Comment rechercher une balise XML avec un attribut spécifique (en C#)

Le problème ici est que l'attribut peut être à l'intérieur de n'importe quelle balise, XPath ne fonctionnera donc pas dans ce cas. Par exemple, une balise d'image peut contenir un href, une balise topicref peut contenir un href, et ainsi de suite.

Je dois donc obtenir un XmlNodeList (tel que renvoyé par la méthode getElementByTagName). Idéalement, j'ai besoin d'une méthode getElementByAttributeName qui devrait retourner XmlNodeList.

+0

XPATH est * totalement * une option. Vous pouvez utiliser '*' comme caractère générique pour n'importe quel élément, comme le démontre la réponse de @Chris Taylor. –

+0

Merci Mads. Je ne savais pas que nous pouvons utiliser des caractères génériques dans XPATH. – matrix

Répondre

5

je pourrais avoir mal compris votre problème ici, mais je pense que vous pourriez utiliser une expression XPath.

var nodes = doc.SelectNodes("//*[@href='pic1.jpg']"); 

Le doit revenir au-dessus de tous les éléments avec href='pic1.jpg', où doc est le XmlDocument

+0

Sans doute, définitivement. – annakata

+0

XPATH plus générique pour renvoyer tous les éléments qui ont un attribut href, quelle que soit sa valeur: '// * [@ href]' –

3

Si vous êtes sur C#, l'approche suivante pourrait fonctionner pour vous:

XDocument document = XDocument.Load(xmlReader); 
XAttribute xa = new XAttribute("href", "pic1.jpg"); 
var attrList = document.Descendants().Where (d => d.Attributes().Contains(xa));