Xml XPath查询如何基于两个属性获取一个属性的值
我想从下面的标记中提取name属性值Xml XPath查询如何基于两个属性获取一个属性的值,xml,xpath,Xml,Xpath,我想从下面的标记中提取name属性值 <application comments="Do not erase this one" executable="run_CIET" icon="default" instances="1" mode="1" name="CIET" order="10" selection="1" tool="y" /> 但如果我想添加更多的条件,即“当mode=X且工具属性不在应用程序
<application
comments="Do not erase this one"
executable="run_CIET"
icon="default"
instances="1"
mode="1"
name="CIET"
order="10"
selection="1"
tool="y"
/>
但如果我想添加更多的条件,即“当mode=X且工具属性不在应用程序标记中时获取name属性值”
我们如何做到这一点?我试过类似的东西
xpath Applications.xml '//applications/application[@mode='3' and !@tool]'/@name
但它不起作用
我以前没有使用过XPath,我发现这很棘手,我搜索了关于XPath的W3C帮助,但没有找到我想要的。请帮助。使用而不是(@tool)
而不是@工具
应该可以完成这项工作。如果您的XPath引擎没有运行,您可以考虑执行count(@tool)=0
,但这应该不是必需的
How do we do this? I tried something like
xpath Applications.xml '//applications/application[@mode='3' and !@tool]'/@name
but its not working.
!@tool
XPath中的语法无效。有一个=代码>运算符,但没有代码>操作员
使用:
//applications/application[@mode='3' and not(@tool)]/@name
有两件事你应该尽量避免:
使用=
运算符——它的定义很奇怪,行为与not()
函数不同——如果其中一个操作数是节点集,则永远不要使用它
尽量避免使用/
缩写词——这可能会导致严重的效率低下,也会导致大多数人不喜欢的异常行为
好问题,+1。请参阅我的答案,了解您问题的解释、简短完整的解决方案和一些建议。:)
//applications/application[@mode='3' and not(@tool)]/@name