Я, может казаться, не заставляю выражение XPath работать на мой сценарий. Я хочу найти все узлы "Устройства", которые имеют тип "EndDevice". Я в состоянии считать все узлы "Устройства", и я также в состоянии найти все узлы "Устройства" с атрибутом "EndDevice". Однако я, может казаться, не комбинирую их!
count(//Device) //works
//Device[@xsi:type='EndDevice'] //works
count(//Device[@xsi:type='EndDevice']) //doesn't work
Если это имеет значение, я использую XPathBuilder.
Я воспроизвел его с помощью XPathBuilder 2.0.0.4. Однако выражение XPath работает и правильно оценивается в онлайн-оценщике, который я пробовал ( http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm).
РЕДАКТИРОВАТЬ: Также пробовал использовать последнюю версию Altova XMLspy
input:
<?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>
output:
<?xml version="1.0" encoding="UTF-8"?>
<output xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="n/a">4</output>
Я думаю, что XPathBuilder делает что-то не так.