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

如何使用xmlstarlet提取//msg节点的属性与子元素为key=value格式

命令调整逻辑

现有命令无法提取属性的核心原因是XPath匹配范围仅限定了//msg/*(即标签的直接子元素节点),完全没有覆盖标签自身的属性节点。只要扩展匹配范围到包含目标属性,搭配对应输出逻辑,即可1:1复刻Nokogiri脚本的输出效果。

分场景实现命令

仅提取//msg节点的所有属性为key=value格式

xmlstarlet sel -T -t -m "//msg/@*" -v "concat(name(),'=',.)" -n file

执行后输出与目标效果完全一致:

date=2020-03-21
time=2021-04-27T11:33:27Z
type=UNKNOWN
level=16
host_id=localhost
host_addr=127.0.0.1
pid=6322

核心参数说明:

  • -m "//msg/@*":匹配所有节点下的全部属性节点
  • -v "concat(name(),'=',.)":对每个匹配节点,拼接节点名、等号、节点自身的值
  • -n:每完成一行输出就追加换行符

同时提取//msg的所有属性、以及直接子元素文本为key=value格式

xmlstarlet sel -T -t -m "//msg/@* | //msg/*" -v "concat(name(),'=',string(.))" -n file

执行后输出与目标效果完全一致:

date=2020-03-21
time=2021-04-27T11:33:27Z
type=UNKNOWN
level=16
host_id=localhost
host_addr=127.0.0.1
pid=6322
txt=service_update * orclcdb = 0

核心参数说明:

  • 用XPath的|取并集,同时覆盖的所有属性、的直接子元素两类节点
  • 用string(.)获取子元素的完整文本内容,避免子元素存在嵌套结构时取值不全
  • 遍历顺序严格遵循XML文档书写顺序:先按标签上属性的出现顺序输出所有属性键值,再按子元素的书写顺序输出子元素键值,与Nokogiri脚本的输出顺序完全对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 00:57:08