【问题标题】:Using xpath inside node not getting the value, but does using document在节点内使用 xpath 未获取值,但使用文档
【发布时间】:2018-05-04 12:12:04
【问题描述】:

我陷入了一种情况,我有一个节点列表,我需要使用 xpath 从节点获取值。

这是我正在尝试的...

<book>

  <book1>
     <abc><fm>text</fm></abc>
     <def></def>
     <ghi></ghi>
  </book1>
  <book2>
     <abc><fm>text</fm></abc>
     <def></def>
     <ghi></ghi>
   </book2>
   <bookN>
     <abc><fm>text</fm></abc>
     <def></def>
     <ghi></ghi>
   </bookN>
</book>

所以在这里我从文档中获取节点列表并使用节点来评估 XPATH

String nodeValue = (String) xPathFac
                                .compile("//fm/text()")
                                .evaluate(bookNode, XPathConstants.STRING);

在这里返回空字符串,请有人帮助我:)

我也试过 .//fm/text() 但没用

【问题讨论】:

  • 你没有结束&lt;/book&gt;标签
  • @tgdavies 那是错别字
  • 我使用了你的内容、你的 XPATH 和你的 Java 代码,它正确地返回了 "text"。能否提供生成bookNode的代码?

标签: java xml xpath


【解决方案1】:

由于您有不同的节点,即 book1、book2、book3 等,您需要创建 disti /book1/abc/fm /book2/abc/fm /book3/abc/fm

XPath 确实支持正则表达式。希望这会有所帮助。

/[substring(name(), 4) = 'book']/abc/fm

理想情况下,您的 XML 结构应该类似于:

<books>
  <book>
     <abc><fm>text</fm></abc>
     <def></def>
     <ghi></ghi>
  </book>
  <book>
     <abc><fm>text</fm></abc>
     <def></def>
     <ghi></ghi>
   </book>
   <book>
      <abc><fm>text</fm></abc>
      <def></def>
      <ghi></ghi>
   </book>
</books>

【讨论】:

  • 我正在遍历节点,并传递你所说的对文档有效的节点和表达式,而不是节点
猜你喜欢
  • 1970-01-01
  • 2011-08-27
  • 2011-09-16
  • 2016-01-09
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
相关资源
最近更新 更多