xml - XPATH,用于将节点与通配符匹配并具有一个属性,但没有另一个属性

标签 xml xpath

再一次,一个xpath使我的生活变得艰难。我需要做的是找到所有具有@ModuleGUID但没有@PresetGUID的“ Module_X”节点。
在此示例中,它应该与Module_1都匹配。

<xml>
<Parent1>
        <Module_0 ModuleGUID="1" PresetGUID="1">
            <ModuleData />
        </Module_0>
        <Module_1 ModuleGUID="{123}" >
                <ModuleData Complexity="0" />
        </Module_1>
</Parent1>
<Parent2>
            <Module_0 ModuleGUID="4" PresetGUID="5">
                <ModuleData />
            </Module_0>
            <Module_1 ModuleGUID="{456}" >
                    <ModuleData Complexity="0" />
            </Module_1>
</Parent2>
</xml>


我想做的是减少它,并尝试仅匹配具有ModuleGUID而不具有PresetGUID的modules_0,但是我仍然无法找出如何组合“必须具有和必须不具有”的东西

我尝试了很多这样的组合,但没有一个对我有用:

//Module_0[@ModuleGuid and not(@PresetGuid)]


编辑:这个简化的例子不起作用,我不知道“匹配缺少的地方”语法的正确语法。最终的XPATH看起来像这样

//*[contains(.,'Module_')] [@ModuleGuid and not(@PresetGuid)]

最佳答案

XPath区分大小写。而不是PresetGuid,而是PresetGUID等等。此外,我假设contains()需要应用到标签名称,而不是打开和关闭标签之间的文本。尝试:

//*[contains(local-name(),'Module_') and not(@PresetGUID) and @ModuleGUID]


退货

<Module_1 ModuleGUID="{123}">
    <ModuleData Complexity="0"/>
</Module_1>
<Module_1 ModuleGUID="{456}">
    <ModuleData Complexity="0"/>
</Module_1>

关于xml - XPATH,用于将节点与通配符匹配并具有一个属性,但没有另一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46920032/

相关文章:

PHP Soap 请求标签为空

java - 如何确定 JAXB 已完成编码到文件

xml - 如何使用工具检查xsd模式本身是否有效?

xpath - 如何获得前面的元素?

java - JAXB 解码 : child elements are null

sql-server - 具有多个命名空间的 SQL Server Xml 查询

php - 解析 HTML 的 XPath 表达式 - 部分通配符表达式

php - 解析HTML div ID包括所有内部内容

xml - XPath 多属性条件变量

xml - 在 xslt 中格式化和显示日期时间