如何使用 yq 解析 XML?

问题描述 投票:0回答:1

嗨,我想使用 yq 解析服务器名称,问题是每次我都必须指定每个服务器的索引,如果这是一种获取服务器名称的方法而不使用 yq 或任何其他方法指定索引。

╭─hakim🐺imap in ~/notes on main ✘ (origin/main)
╰$ cat /home/hakim/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/original/config.xml | yq -p=xml .domain.server
- name: AdminServer
  ssl:
    name: AdminServer
    listen-port: "7002"
  listen-address:
- name: Server_1
  machine: Machine_1
  listen-port: "7003"
  cluster: Cluster_1
  listen-address:
  jta-migratable-target:
    user-preferred-server: Server_1
    cluster: Cluster_1
- name: Server_2
  machine: Machine_1
  listen-port: "7004"
  cluster: Cluster_1
  listen-address:
  jta-migratable-target:
    user-preferred-server: Server_2
    cluster: Cluster_1
- name: Server_3
  machine: Machine_1
  listen-port: "7005"
  cluster: Cluster_1
  listen-address:
  jta-migratable-target:
    user-preferred-server: Server_3
    cluster: Cluster_1
xml yq
1个回答
3
投票

传递查询以请求信息。在这种情况下

'.domain.server[] | .name'
将获取服务器名称

# multiple servers
yq -o 'y' '.domain.server[] | .name' config.xml
# single server
yq -o 'y' '.domain.server | .name' config.xml

对于

yq
v4.35.x 左右的某些版本,下面的命令会抛出警告

12:14:03 initCommand [警告] yq 默认输出现在为“auto”(基于文件扩展名)。通常 yq 会输出“xml”,但为了向后兼容,已设置“yaml”。请使用 -oy 指定 yaml,或删除 -p 标志。

yq -p xml '.domain.server[] | .name' test.xml

结果

AdminServer
edys-web

来自

yq
帮助

-p, --输入格式字符串
-o, --output-format string [auto|a|yaml|y|json|j|props|p|xml|x|tsv|t|csv|c] 输出格式类型。 (默认“自动”)

yq -oy ...
让我有点困惑,因为在某些命令中它可能意味着
cmd -o -y
,所以

yq -o 'y' ...
yq -o 'yaml' ...
yq --output-format 'y' ...

:-)

© www.soinside.com 2019 - 2024. All rights reserved.