Comment puis-je utiliser XPath pour compter le nombre de noeuds avec un certain attribut
je n'arrive pas à obtenir une expression XPath pour travailler pour mon scénario. Je veux trouver tous les noeuds "Device" qui ont le type "EndDevice". Je suis capable de compter tous les noeuds "Device", et je suis aussi capable de trouver tous les noeuds "Device" avec l'attribut "EndDevice". Cependant, je n'arrive pas à les combiner!
count(//Device) //works
//Device[@xsi:type='EndDevice'] //works
count(//Device[@xsi:type='EndDevice']) //doesn't work
si c'est important, J'utilise XPathBuilder.
2 réponses
Je l'ai reproduit en utilisant XPathBuilder 2.0.0.4. Cependant L'expression XPath fonctionne et évalue correctement dans un évaluateur en ligne que j'ai essayé (http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm).
EDIT: également essayé avec la dernière version de Altova XMLspy
entrée:
<?xml version="1.0"?>
<asdf xmlns:xsi="n/a">
<Device xsi:type='EndDevice'/>
<Device xsi:type='EndDevice'/>
<Device xsi:type='EndDevice'/>
<Device xsi:type='EndDevice'/>
</asdf>
xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="n/a">
<xsl:output indent="yes"/>
<xsl:template match="*">
<output>
<xsl:value-of select="count(//Device[@xsi:type = 'EndDevice'])"/>
</output>
</xsl:template>
</xsl:stylesheet>
sortie:
<?xml version="1.0" encoding="UTF-8"?>
<output xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="n/a">4</output>
je pense que C'est XPathBuilder qui fait quelque chose de mal.
en utilisant le xml ci-dessus enregistré dans un test.xml et l'utilisation de l'outil http://kernowforsaxon.sourceforge.net/
declare namespace xsi="n/a";
count(doc('test.xml')//Device[@xsi:type = "EndDevice"])
produit la bonne sortie.