【问题标题】:XPath query: finding all answers to non-required questionsXPath 查询:查找非必填问题的所有答案
【发布时间】:2013-10-18 14:26:55
【问题描述】:

我想找到所有非必填问题的答案。这是xml代码:

<submittedPoll>
  <pollHead>
    <code>2</code>
  </pollHead>
  <pollBody>
    <topic code="T1">
        <topicHead>
            <title>XML Section</title>
        </topicHead>
        <topicBody>
            <question code="T1Q1" required="true" type="unique">Which encoding did you use?</question>
            <answer code="T1Q1_1">ISO-8859-1</answer>
            <question code="T1Q2" required="true" type="unique">How did you implement blabla?</question>
            <answer code="T1Q2_1">blabla</answer>
            <question code="T1Q3" type="unique">Did you blabla?</question>
            <question code="T1Q4" type="unique">How many times did you blabla?</question>
        </topicBody>
    </topic>
    <topic code="T4">
        <topicHead>
            <title>Other section</title>
        </topicHead>
        <topicBody>
            <question code="T4Q1" type="unique">blabla question?</question>
            <question code="T4Q2" type="unique">blabla other question?</question>
            <question code="T4Q3" required="true" type="multiple">blabla third question?</question>
            <answer code="T4Q3_1">blabla</answer>
            <answer code="T4Q3_2">blablabla</answer>
            <question code="T4Q4" type="unique">blablarly?</question>
            <question code="T4Q5" type="unique">blablanotrly?</question>
            <question code="T4Q6" type="unique">How did you do that?</question>
            <answer code="T4Q6_2">BaseX</answer>
        </topicBody>
    </topic>
  </pollBody>
</submittedPoll>

我编写了这个 XPath 查询,但它没有按预期工作:

/submittedPoll/pollBody/topic/topicBody/question[not(@required) or (@required="false")]/following-sibling::answer[starts-with(@code, current()/@code)]

这将返回 T4Q3_1、T4Q3_2 和 T4Q6_2。但是 T4Q3_1 和 T4Q3_2 是错误的,因为它们遵循一个必填问题。

我做错了什么?可能我没有正确理解current()函数。

注意:所有答案“代码”属性都以相对问题“代码”属性开头(即,问题 T4Q3 带有答案 T4Q3_1、T4Q3_2 等)

【问题讨论】:

    标签: java xml xpath


    【解决方案1】:

    我相信你可以简单地做到:

    //answer[preceding-sibling::question[1][not(@required) or (@required="false")]]
    

    基本上,这是在不需要前面的第一个问题的地方找到答案。

    【讨论】:

    • 你是对的!我仍然必须进入 XPath 心情 :) 谢谢贾斯汀
    猜你喜欢
    • 2016-05-28
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    相关资源
    最近更新 更多