java - xml解析中通过标签名获取元素,不包括部分父母的孩子
问题描述
我有一个正在解析的 xml 文件。尽管某些标签名称碰巧出现多次,但在不同的父名称下。我知道我想忽略哪个父母的孩子。我怎样才能做到这一点?
<sub-article id="S01" article-type="translation" xml:lang="pt">
<front-stub>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Artigos Originais</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>
Prevalência de deficiência nutricional em pacientes com
tuberculose pulmonar
<xref ref-type="fn" rid="fn02">*</xref>
</article-title>
</title-group>
</front-stub>
</article-categories>
</sub-article>
.....
.....
<article-meta>
<article-id pub-id-type="pmid">24068270</article-id>
<article-id pub-id-type="pmc">4075858</article-id>
<article-id pub-id-type="publisher-id">S1806-37132013000400012</article-id>
<article-id pub-id-type="doi">10.1590/S1806-37132013000400012</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Original Articles</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>
Prevalence of nutritional deficiency in patients with
pulmonary tuberculosis
<xref ref-type="fn" rid="fn01">*</xref>
</article-title>
</title-group>
<article-meta>
在这个例子中,我不想处理子文章标签下的孩子。因此,“文章标题”将仅针对“肺结核患者营养缺乏的患病率”而不是“Prevalência de deficiência nutricional em pacientes pulmonar”进行处理
我目前正在关注代码,它返回所有名称为“title-group”的节点。我怎样才能使其具体化,这样我就不会从某个父级获得它。
NodeList titleNodeList = document.getElementsByTagName("title-group");
解决方案
使用 XPath 有两种方法可以实现它:
- 包括目标元素名称
<article-meta>
- 排除目标元素名称
<sub-article>
就我个人而言,我更喜欢第一个,因为它更明确并且总是面对不同的 XML 文件。
解决方案 1 包含
使用 XPath 仅选择以下元素中的元素<article-meta>
:
//article-meta//title-group
爪哇:
XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xPath.compile("//article-meta//title-group");
NodeList titleNodes = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
解决方案 2 排除
如果元素位于<sub-article>
. 我假设 XML 根元素是<article>
(如果不是这种情况,请证明代码是正确的):
/article/*[not(self::sub-article)]//title-group
爪哇
XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xPath.compile("/article/*[not(self::sub-article)]//title-group");
NodeList titleNodes = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
推荐阅读
- django - 迁移 Django 库
- python - 如何有条件地抓取网站数据?
- android - 未为超链接加载的 Android webview 内容包含哈希
- python - 为什么比较在python中的if条件下不起作用?
- asp.net - ASP.NET Core 中 HttpRequest.Path 的 URL 解码不一致
- angular - 角度反应形式的总和值输入
- bootstrap-datepicker - 引导版本 4.5.3 和日期时间选择器
- javascript - 从 React 中的异步调用批量状态更新的最佳方法是什么?
- arrays - MongoDB | 更新数组中的对象更新不同的对象然后给定参数
- kaizala - 在 Kaizala Web 和应用程序中面临复制粘贴问题