Je n'arrive pas à obtenir une expression XPath pour mon scénario. Je veux trouver tous les nœuds "Device" qui ont le type "EndDevice". Je suis capable de compter tous les nœuds "Device" et je peux également trouver tous les nœuds "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 cela importe, j'utilise XPathBuilder.
Je l'ai reproduit en utilisant XPathBuilder 2.0.0.4. Cependant, l'expression XPath fonctionne et s'é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 d'Altova XMLspy
contribution:
<?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>
production:
<?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.
Utiliser le xml ci-dessus enregistré dans un test.xml et utiliser l'outil http://kernowforsaxon.sourceforge.net/
declare namespace xsi="n/a";
count(doc('test.xml')//Device[@xsi:type = "EndDevice"])
Produit la bonne sortie.