【问题标题】:Xpath Contains Query on child node to return Parent nodeXpath 包含子节点上的查询以返回父节点
【发布时间】:2015-08-04 15:13:22
【问题描述】:
String query = null;
XPathExpression expr;
Object Result = null;

expr = xpath.compile("//table/column[contains(translate(text(),'ABCDEFGHIJKLMNAOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'"+query+"')]//text()");

result = expr.evaluate(doc, XpathConstants.NODESET);

NodeList nodes = (NodeList) result;

for (int i = 0; i<nodes.getLength(); i++){
     System.out.println(nodes.item(i).getParentNode().getNodeName() + "" + nodes.item(i).getNodeValue());
}

您好,首先我想说我是 xpath 的新手,对 java 还很陌生。我正在尝试为这个大的 xml 文件创建一个查询界面,这就是我迄今为止想出的。 xml 文件充满了日志,它的设置有点像这样......

 <database>
          <table>
               <column1>
               <column2>
               <column3>
               .....

该代码在拉回与搜索词匹配的列时效果很好,但是我希望它拉回整个表格,然后将其打印出来。这将为我提供更多有价值的信息,包括输入它的人的日期戳等......我尝试了各种尝试从​​节点(i)获取父节点然后将 .getchildnodes 放入另一个节点列表但没有工作。我还尝试在 text() 之前的 xpath 末尾添加 /.. 以查看它是否会返回父级,但最终只是以某种方式给了我根标记。我想我有点接近了,也许不是我不知道,但如果有人能提供帮助,我将不胜感激,我已经坚持了一段时间了。

【问题讨论】:

  • xml文件结构如下:
  • ....
  • 您的意思是元素名称是column1column2,还是实际上命名为column?此外,您没有在示例 xml 中显示任何文本。文本是直接在每个column 元素中,还是在后代中?
  • 您能否更清楚地了解“我希望它拉回整个表格然后打印出来”的意思?显示特定示例输入的所需输出。
  • 你是对的,对不起,它们都被命名为列,并且每个都有不同的名称属性。文本直接位于每个列元素中。 “我想拉回整个表格,然后将其打印出来” = 当我在一列中的关键字搜索中获得点击而不是仅仅拉回该列时,我希望它也拉回它的所有兄弟姐妹在同一张桌子上。我希望这更清楚一点

标签: java xml dom xpath keyword-search


【解决方案1】:

认为你想使用..而不是//

例如,要获取所有td 值为xxxtable,您可以使用

//table/tr/td[text() = 'xxx']/../..

【讨论】:

  • 我把它放在 //text() 之前让它工作了 非常感谢!!
猜你喜欢
  • 2011-07-24
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多