You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于<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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:35:01