XPath Как получить количество родительских узлов с несколькими фильтрами, включая дочерний узел - PullRequest
0 голосов
/ 10 июля 2020

Вот пример XML:

  <Pnode PFilter="1">
    <Child1>
        <Child2 Filter="1"></Child2>
        <Child2></Child2>
    </Child1>
    <Child1>
        <Child2 ></Child2>
        <Child2></Child2>
    </Child1>
    <Child1>
        <Child2 Filter="1"></Child2>
        <Child2></Child2>
    </Child1>
  </Pnode>
  <Pnode>
    <Child1>
        <Child2 Filter="1"></Child2>
        <Child2></Child2>
    </Child1>
    <Child1>
        <Child2 ></Child2>
        <Child2></Child2>
    </Child1>
    <Child1>
        <Child2 Filter="1"></Child2>
        <Child2></Child2>
    </Child1>
  </Pnode>
  <Pnode>
    <Child1>
        <Child2 Filter="1"></Child2>
        <Child2></Child2>
    </Child1>
    <Child1>
        <Child2 ></Child2>
        <Child2></Child2>
    </Child1>
    <Child1>
        <Child2 Filter="1"></Child2>
        <Child2></Child2>
    </Child1>
  </Pnode>
  <Pnode>
    <Child1>
        <Child2></Child2>
        <Child2></Child2>
    </Child1>
    <Child1>
        <Child2 ></Child2>
        <Child2></Child2>
    </Child1>
    <Child1>
        <Child2></Child2>
        <Child2></Child2>
    </Child1>
  </Pnode>
</Doc1>

Я пытаюсь получить количество всех PNodes, которые не имеют PFilter = "1" и имеют хотя бы 1 child2 filter = 1.

В приведенном выше примере результат должен быть 2.

expession="count(//Doc1/Pnode[not (@PFilter='1') and (Child1/Child2[@Filter='1'])])"

похоже, что он должен работать. Мне не хватает синтаксиса или чего-то в этом роде?

Я тоже подумал, может быть, expession="count(//Doc1/Pnode[not (@PFilter='1') and (count(Child1/Child2[@Filter='1'])>1)])"

Есть ли способ получить количество родителя с помощью этого типа фильтров?

1 Ответ

1 голос
/ 10 июля 2020

Ниже должно работать. Попробуйте:

expression="count(//Pnode[not (@PFilter='1')][Child1/Child2[@Filter='1']])"

или

expression="count(//Doc1/Pnode[not (@PFilter='1')][Child1/Child2[@Filter='1']])"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...