XPath для подсчета дочерних узлов на основе сложного фильтра - PullRequest
8 голосов
/ 07 июня 2011

У меня есть XML в следующем формате:

<ComRequest>
  <root lineId="1" creator="jumnix">
    <component lineId="101">
        <compLine lineId="1001">1</compLine>
        <compLine lineId="1002">2</compLine>
        <compLine lineId="1003">3</compLine>
        <compLine lineId="1004">4</compLine>
        <compLine lineId="1005">5</compLine>
        <compLine lineId="1006">6</compLine>
        <compLine lineId="1007">7</compLine>
        <compLine lineId="1008">8</compLine>
        <compLine lineId="1009">9</compLine>
        <compLine lineId="1010">10</compLine>
        <compLine lineId="1011">11</compLine>
    </component>
    <component lineId="102">
        <compLine lineId="1012">12</compLine>
        <compLine lineId="1013">13</compLine>
        <compLine lineId="1014">14</compLine>
        <compLine lineId="1015">15</compLine>
        <compLine lineId="1016">16</compLine>
        <compLine lineId="1017">17</compLine>
        <compLine lineId="1018">18</compLine>
        <compLine lineId="1019">19</compLine>
        <compLine lineId="1020">20</compLine>
        <compLine lineId="1021">21</compLine>
        <compLine lineId="1022">22</compLine>
    </component>
  </root>
</ComRequest>

У меня есть требование получить количество «компонентных» узлов, имеющих более 10 элементов «compLine».До сих пор у меня есть следующий запрос XPath -

count(//*[local-name()='ComRequest']/*[local-name()='root']/*[local-name()='component']/*[local-name()='compLine' and count(self) gt 10])

Но это не работает (дает результат '0').Любая помощь в решении этой проблемы приветствуется.

Ответы [ 2 ]

11 голосов
/ 08 июня 2011

Как насчет count(//ComRequest/root/component[count(compLine)>10])?

2 голосов
/ 08 июня 2011

@ Bala-R (+1) правильно оценено с использованием совместимого процессора XSLT 1.0 (Saxon):

count(//ComRequest/root/component[count(compLine)>10])

или

count(/*/*/*[count(compLine)>10])

В противном случае что-то пойдет не так в ваших тестах, вашем контексте (отличном от того, который указан в вопросе) или оценщике xpath.

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