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

如何使用xmllint --xpath提取XML节点内容与属性值

RHEL环境下仅用xmllint提取XML目标值方案

匹配失败根因

之前提取失败和空白字符处理无关,核心原因是目标XML声明了默认命名空间,直接写裸节点名的XPath表达式无法命中对应节点。

单文件提取命令

RHEL预装的xmllint仅支持XPath 1.0,无需手动绑定命名空间前缀、一次调用即可同时提取两个目标值的命令如下,直接输出两行结果,第一行为<model>标签的mh属性值,第二行为目标<attribute>标签的文本:

xmllint --xpath "concat(string(//*[local-name()='model']/@mh), '&#10;', string(//*[local-name()='model']/*[local-name()='attribute' and @id='0x12345']), '&#10;')" 你的xml文件路径

命令中&#10;是XML转义格式的换行符,local-name()写法可以绕开默认命名空间的匹配限制,不需要手动填写XML中冗长的命名空间地址,同结构XML即使命名空间地址变动也能正常匹配。

批量处理脚本

针对5000+份XML文件的批量处理需求,直接使用下面的shell脚本即可,脚本会自动遍历当前目录下所有xml文件,空值/提取失败的字段自动替换为NOTHING,最终输出完全符合要求的交替行格式,结果存入device_list.txt:

#!/bin/bash
for xml_file in ./*.xml; do
  mh_val=$(xmllint --xpath "string(//*[local-name()='model']/@mh)" "$xml_file" 2>/dev/null)
  attr_val=$(xmllint --xpath "string(//*[local-name()='model']/*[local-name()='attribute' and @id='0x12345'])" "$xml_file" 2>/dev/null)
  [ -z "$mh_val" ] && mh_val="NOTHING"
  [ -z "$attr_val" ] && attr_val="NOTHING"
  echo "$mh_val"
  echo "$attr_val"
done > device_list.txt

使用说明

  • 如果目标<attribute>标签的id不是0x12345,直接替换脚本中对应位置的id值即可
  • 脚本自动屏蔽XML格式错误的报错信息,遇到损坏文件不会中断批量任务,对应字段自动填充为NOTHING
  • 单文件提取速度极快,5000份文件处理耗时通常在数秒内,无性能问题

附本次测试用的XML结构参考:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <model-response-list xmlns="http://www.website.com/thing/link/linktothing/linklink" total-models="1" throttle="1" error="EndOfResults">
        <model-responses>
            <model mh="0x12345678">
                <attribute id="0x12345">EXTRACT_THIS_PLEASE</attribute>
            </model>
        </model-responses>
    </model-response-list>

内容的提问来源于stack exchange,提问作者Musik847

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:27:22