【问题标题】:Find string from xpath which contains tag as child elements In Java在Java中从包含标记作为子元素的xpath中查找字符串
【发布时间】:2018-03-05 10:29:59
【问题描述】:

我有以下部分 XML 代码,我想从特定标签中获取字符串。

输入 XML:

<subject>
   <title> this title has 5 <sup>+</sup> rating star </title>
</subject>

从上面的 XML 我想要一个使用 xpath 之类的字符串

预期输出:

"this title has 5+ rating star"

注意:我使用过 @XmlPath 之类的

@XmlPath('subject/title/text()')
private String title;

但它返回第二个值作为标题变量的结果,如“评级星”

【问题讨论】:

  • 当然可以,但是您的尝试在哪里?
  • @AniketSahrawat 我面临的问题是如果主标签包含子标签,那么它会返回字符串的最后一部分作为结果并覆盖第一部分。
  • 请帮我解决上述问题。

标签: java jaxb marshalling unmarshalling for-xml-path


【解决方案1】:

这正是人们建议不要使用 text() 的原因,除非您有非常特殊的要求。应用于节点的 XPath 函数 string() 返回节点的字符串值,对于一个元素,它是所有包含文本的串联,忽略标记 - 这正是您正在寻找的。所以你想要string(subject/title)。如果您使用的是 Java API,请注意结果现在将是字符串,而不是节点集。

【讨论】:

  • 其实我是用xpath作为注解的.. @XmlPath("subject/title/text()") private String title;
  • 我不认为数据绑定对混合内容非常有效(但其他人可能不同意)。
【解决方案2】:

也许你可以试试string(subject/title)。我暂时无法访问 Java,但字符串操作在 XPath 中很常见。它应该连接文本内容而没有任何元素的痕迹。

【讨论】:

  • 可能类似于:'''XPath xPath = XPathFactory.newInstance().newXPath();字符串表达式 = "//主题/字符串(标题)"; nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);'''
猜你喜欢
  • 2015-07-05
  • 2016-03-03
  • 1970-01-01
  • 2021-12-17
  • 2015-05-08
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多