【问题标题】:How to merge results of two unrelated xpath queries?如何合并两个不相关的 xpath 查询的结果?
【发布时间】:2014-08-07 11:40:19
【问题描述】:

我有两个 xpath 查询

query1query2

query1 的执行结果是

row11
row12

query2的执行结果是

row21
row22
row23
row24

我想编写 single 查询,结果如下:

row11
row12
row21
row22
row23
row24

你能帮帮我吗?

【问题讨论】:

  • 你必须使用 XPath 吗?如果您可以将查询转换为使用 Predicate.class 构建,您可以将两个查询添加到一个 PredicateGroup 并指定 setAllRequired(false)

标签: java xpath merge aem jcr


【解决方案1】:

我只需要List 行,您可以在其中添加两个查询的结果。如果两个结果可以具有相同的行,则您必须定义一个标识符并使​​用 Map 将此 id 作为键。

以简单的List为例:

QueryManager qm = session.getWorkspace().getQueryManager();
Query q1 = qm.createQuery(statement1, "xpath");
QueryResult r1 = q1.execute();
RowIterator rows1 = r1.getRows();

Query q2 = qm.createQuery(statement2, "xpath");
QueryResult r2 = q2.execute();
RowIterator rows2 = r2.getRows();

List<Row> rowsMerged = new ArrayList<Row>();
while (rows1.hasNext()) {
 rowsMerged.add(rows1.nextRow());
}
while (rows2.hasNext()) {
 rowsMerged.add(rows2.nextRow());
}

【讨论】:

  • 这有点开销。我可以写类似 query1 和 query2 的东西吗?
【解决方案2】:

您可以尝试使用 XPath union (|) 运算符。例如,给定这个 XML:

<Employee>
    <EmpId>1</EmpId>
    <Name>Sam</Name>
    <Sex>Male</Sex>
</Employee>

还有这个包含联合运算符的 XPath:

(/Employee/EmpId | /Employee/Name)

XPath 测试器中的输出节点:

<EmpId>1</EmpId>
<Name>Sam</Name>

【讨论】:

  • 尝试将两个查询都放在括号内,例如:(query1 | query2)。或者,如果您仍然遇到语法错误,则可能不支持此 XPath 语法...
  • 好像不支持
猜你喜欢
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
相关资源
最近更新 更多