Как я использую XPath для подсчета количества узлов с определенным атрибутом

Я, может казаться, не заставляю выражение XPath работать на мой сценарий. Я хочу найти все узлы "Устройства", которые имеют тип "EndDevice". Я в состоянии считать все узлы "Устройства", и я также в состоянии найти все узлы "Устройства" с атрибутом "EndDevice". Однако я, может казаться, не комбинирую их!

count(//Device) //works
//Device[@xsi:type='EndDevice'] //works
count(//Device[@xsi:type='EndDevice']) //doesn't work

Если это имеет значение, я использую XPathBuilder.

28
задан Jason Young 5 March 2010 в 18:59
поделиться

1 ответ

Я воспроизвел его с помощью 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 делает что-то не так.

21
ответ дан 28 November 2019 в 03:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: