我有XML,例如
<doc>
<Object id="x">
<Attributes>
<MATERIAL>PLA</MATERIAL>
<METHOD>Inserted</METHOD>
<PRESSURE>HP</PRESSURE>
</Attributes>
</Object>
<Object id="y">
<Attributes>
<MATERIAL>P</MATERIAL>
<METHOD>Unknown</METHOD>
<PRESSURE>HP</PRESSURE>
</Attributes>
</Object>
.
.
.
</doc>
其中Object元素出现一个先验未知的次数,并且我想要一个返回0或1的XPath表达式,如果条件在任何(至少1个)对象中保持为真。
做类似
的事情number(boolean(//Object/Attributes[(MATERIAL="PLA")])) * number(boolean(//Object/Attributes[(METHOD="Unknown")]))
返回1,因为两者在某处都是真的,但我想要一个0,因为在任何单个Object中都没有它们都是真的。
我受限于XML 1.0。
我希望有一个灵活的解决方案,或许涉及到某些我无法发现的关于Object的谓词。
每个Object属性都是唯一的,如果可以利用它。
在与SQL并行绘图时,我希望在应用感兴趣的条件时以某种方式按对象进行分组。
虽然我可以通过编程方式提取对象并单独处理它们,但我真的不愿意!
TIA, 戴夫
答案 0 :(得分:1)
听起来你只需要使用and
:
number(boolean(//Object[Attributes/MATERIAL = "PLA" and
Attributes/METHOD = "Unknown"]))
如果您手动编写XPath(而不是动态拼接),则可以进一步简化此特定示例:
number(boolean(//Object/Attributes[MATERIAL = "PLA" and METHOD = "Unknown"]))