如何基于<type>标签值用XPath 1.0提取XML中的CVE参考值?
问题描述
需要从给定XML中提取满足以下条件的内容:当<type>标签的值为cve时,提取其对应父节点下的<reference>子节点文本;若<type>值不为cve则跳过。由于CVE对应节点位置不固定,无法通过节点计数定位。
当前使用xidel工具,尝试的XPath表达式:
//references[1]/reference[1]/reference[normalize-space(text()='CVE')[1]
该表达式输出了所有<reference>的值:
CWE:327 https://example.com 327 49778 CVE-2011-3389
未能得到正确的目标结果,寻求正确的XPath写法。
XML示例:
<references> <reference> <type>other</type> <title/> <reference>CWE:327</reference> <description/> <url/> </reference> <reference> <type>other</type> <title/> <reference>https://example.com</reference> <description/> <url/> </reference> <reference> <type>other</type> <title/> <reference>327</reference> <description/> <url/> </reference> <reference> <type>bugtraq</type> <title/> <reference>49778</reference> <description/> <url/> </reference> <reference> <type>cve</type> <title/> <reference>CVE-2011-3389</reference> <description/> <url/> </reference> </references>
正确的XPath写法及使用方法
正确的XPath表达式
//reference[type='cve']/reference/text()
表达式解释
//reference[type='cve']:定位到所有包含子节点<type>且其文本值为cve的<reference>父节点(对应XML中每个包含<type>和子<reference>的外层<reference>节点)/reference/text():从符合条件的父节点中,提取其下的<reference>子节点的文本内容
xidel工具执行命令
假设XML文件名为input.xml,执行以下命令即可得到目标结果:
xidel input.xml -e "//reference[type='cve']/reference/text()"
执行结果
CVE-2011-3389
内容的提问来源于stack exchange,提问作者jerrythebum
相关产品推荐
相关产品推荐

