【问题标题】:Xpath annotation with a predicate带有谓词的 Xpath 注释
【发布时间】:2014-10-12 10:12:06
【问题描述】:

首先,我是 Xpath 的新手。我发现了大量使用 Xpath 查询元素是否存在的示例。但我无法实现我想要的示例。我的 xml 是这样的:

<a>
    <b>
        <c>xxx</c>
        <d>yyy</d>
    </b>
</a>
<a>
    <b>
        <d>zzz</d>
    </b>
</a>

我只希望同时存在“c”和“d”的“a”项。所以我这样做了:

@XPath("a/b[boolean(c) and boolean(d)]")
private A a;

有人可以告诉我正确的方法吗?

谢谢

阿里

【问题讨论】:

    标签: xml xpath predicate moxy


    【解决方案1】:
    a[descendant::c and descendant::d]
    

    使用descendant 节点c 和d 选择a 节点。

    请注意,您的 XML 示例是无效的,因为它缺少根节点(可能它只是一个示例,而不是您的实际文档...)。

    【讨论】:

    • 感谢您的回答。其实我认为它应该是这样的: a/b[//c 和 //b] 。我已经尝试过你的方式和我的方式,但它仍然 jaxb 仍然提供所有“a”元素:(
    • 这取决于您想要的具体程度。您正在使用原始查询在 a/b 下指定 c 和 d 节点——您的问题只是说您想要 a 节点,其中 c 和 d 都是后代。您在评论中的查询将不起作用,因为// 会搜索根节点下的任何节点——您想要的节点是a 的后代。如果您有特定的输出,则需要在问题中明确说明。
    • 你对“a under b and c”的说法是正确的,我已经纠正了它:) thx。我使用了后代,但即使有合适的元素,它也没有带来任何元素:(我不知道是不是因为注释
    • 您的 XML 验证了吗?您是否使用在线测试器(例如freeformatter.com/xpath-tester.html)和您的实际 XML 尝试过 xpath?如果 XPath 不工作,可能会出现许多问题——这可能与 XPath 本身无关。 :\
    • 由于 OP 的一个标签提到使用了 moxy,因此像 descendant:: 等这样的轴将不起作用。参见例如这里:stackoverflow.com/questions/8404134/… 和仍未解决的错误bugs.eclipse.org/bugs/show_bug.cgi?id=365840
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多