简而言之,我正在尝试这样做:在我的情况下将子元素求和为“优先级”,但通过基于其中特定文本的过滤器排除其他子元素。我的 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
但我想将 Sum 结果划分为 Vertical 和 Horizontal 基于
<ATTRIBUTE name="Direction" type="ENUMERATION">Vertical</ATTRIBUTE>
和
<ATTRIBUTE name="Direction" type="ENUMERATION">Horizontal</ATTRIBUTE>
那么我如何过滤掉“水平”优先级,以便最终我得到 80 作为“垂直优先级”的最终结果?
我已经尝试过这种方法,但它不起作用
sum(//*[@name='Priority'][@type='INTEGER'] [not(//*[text()='Horizontal'])])
非常感谢任何帮助,谢谢