2013-06-04 2 views
0

Можно ли подсчитать следующие ИСТИННЫЕ узлы (с разными именами) с XPath в XML ниже?XPath: подсчитать истинные дочерние узлы с разными именами?

<my:templateBase> 
    <my:executive>true</my:executive> 
    <my:seniorManager>false</my:seniorManager> 
    <my:manager>false</my:manager> 
    <my:supervisor>false</my:supervisor> 
    <my:directReport>false</my:directReport> 
</my:templateBase> 

Я не могу обработать XPATH, например. count(templateBase/*[?=true()]).

+1

Пытались ли вы // мой: templateBase/COUNT (* [текст() = 'истинный']) ? –

+0

Это будет возвращать индивидуальные подсчеты для каждого имени элемента в XPath 2.0 (который InfoPath не поддерживает). В XPath 1.0 функции не могут быть вызваны в шагах оси. –

ответ

1

Найти все элементы, содержащие текст «true» и считать их.

count(//my:templateBase/*[text() = 'true']) 

Убедитесь, что правильно зарегистрировать пространства имен или использовать * вместо my в качестве подстановочных имен, например

count(//*:templateBase/*[text() = 'true']) 

Я не знаю INFOPATH, может быть, это и просто опускает пространства имен.

Если вы хотите найти подузлы для текста "истина", используйте

count(//my:templateBase//*[text() = 'true']) 
-1

является XPath

count(//my:templateBase/*[. = 'true'] 

Пожалуйста, обратите внимание, что вы abviously есть пространство имен my в вашем XML. Возможно, вам нужно сделать ваш процессор осведомленным об этих пространствах имен. Вы также можете использовать подстановочный знак, т. Е. *:templateBase

+1

Хотя это возвращает «1», который является правильным для этого ввода, ваш запрос никогда не вернет ничего, кроме «1» для нескольких истинных элементов. –

+0

@JensErat Вы правы, мой плохой. Я просто изменил это, так что он работает сейчас, как и ожидалось. – dirkk

Смежные вопросы