Суммируйте определенный дочерний элемент с помощью Xpath, но исключайте другие путем фильтрации - PullRequest
0 голосов
/ 28 января 2019

Короче говоря, я пытаюсь сделать это: суммировать дочерние элементы в моем случае «Приоритет», но исключая других дочерних элементов с фильтром на основе конкретного текста внутри него.Мой Xml

   <?xml version="1.0" encoding="UTF-8"?>
<Test>
   <MODELS>
      <MODEL>
         <MODELATTRIBUTES>
                <INSTANCE id="obj.22519" class="Ambulance" name="Ambulance-42632">
                    <ATTRIBUTE name="Position" type="STRING">NODE x:9.5cm y:10.5cm w:1cm h:1.5cm index:66</ATTRIBUTE>
                    <ATTRIBUTE name="External tool coupling" type="STRING"></ATTRIBUTE>
                    <ATTRIBUTE name="Priority" type="INTEGER">20</ATTRIBUTE>
                    <ATTRIBUTE name="Direction" type="ENUMERATION">Vertical</ATTRIBUTE>
                </INSTANCE>
                <INSTANCE id="obj.22525" class="Police car" name="Police car-42638">
                    <ATTRIBUTE name="Position" type="STRING">NODE x:9.5cm y:12.5cm w:1cm h:1cm index:68</ATTRIBUTE>
                    <ATTRIBUTE name="External tool coupling" type="STRING"></ATTRIBUTE>
                    <ATTRIBUTE name="Availability" type="ENUMERATION">Free</ATTRIBUTE>
                    <ATTRIBUTE name="Priority" type="INTEGER">60</ATTRIBUTE>
                    <ATTRIBUTE name="Direction" type="ENUMERATION">Vertical</ATTRIBUTE>
                </INSTANCE>
                <INSTANCE id="obj.22595" class="Car" name="Car-22595">
                    <ATTRIBUTE name="Position" type="STRING">NODE x:3cm y:7cm w:1.5cm h:1cm index:88</ATTRIBUTE>
                    <ATTRIBUTE name="External tool coupling" type="STRING"></ATTRIBUTE>
                    <ATTRIBUTE name="Priority" type="INTEGER">2</ATTRIBUTE>
                    <ATTRIBUTE name="Direction" type="ENUMERATION">Horizontal</ATTRIBUTE>
                </INSTANCE>
        </MODELATTRIBUTES>
    </MODEL>
  </MODELS>
</Test>

Я на самом деле могу суммировать все значения приоритетов, например:

sum(//*[@name='Priority'][@type='INTEGER'])

Я получаю

82

но я хочу разделить итоговый результат по вертикали и горизонтали на основе

<ATTRIBUTE name="Direction" type="ENUMERATION">Vertical</ATTRIBUTE>

и

<ATTRIBUTE name="Direction" type="ENUMERATION">Horizontal</ATTRIBUTE>

, так как я могу отфильтровать приоритет "Horzontal", чтобыв итоге я получаю только 80 в качестве окончательного результата для «Вертикальных приоритетов»?

Я пробовал этот подход, но он не работает

sum(//*[@name='Priority'][@type='INTEGER'] [not(//*[text()='Horizontal'])])

Любая Помощь действительно ценится,спасибо

1 Ответ

0 голосов
/ 28 января 2019

Чтобы получить сумму вертикального приоритета (отформатировано для удобства чтения):

sum(
    //INSTANCE[ATTRIBUTE[@name="Direction" and .='Vertical']]
     /ATTRIBUTE[@name='Priority'][@type='INTEGER']
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...