1

简而言之,我正在尝试这样做:在我的情况下将子元素求和为“优先级”,但通过基于其中特定文本的过滤器排除其他子元素。我的 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 和 Horizo​​ntal 基于

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

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

那么我如何过滤掉“水平”优先级,以便最终我得到 80 作为“垂直优先级”的最终结果?

我已经尝试过这种方法,但它不起作用

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

非常感谢任何帮助,谢谢

4

1 回答 1

0

要获得垂直优先级的总和(为便于阅读而格式化):

sum(
    //INSTANCE[ATTRIBUTE[@name="Direction" and .='Vertical']]
     /ATTRIBUTE[@name='Priority'][@type='INTEGER']
)
于 2019-01-28T10:43:16.530 回答