如何使用 ksh 脚本将通用 xml 格式块从 xml 文件转换为属性格式字符串

How to convert a generic xml format block to properties format String from an xml file using ksh script

具备条件:

  1. 我不能使用任何 XML 解析器工具,因为我没有权限,只读

  2. 我的xmllint版本不支持xpath,无法更新,只读

  3. 我没有 xmlstarlet,无法安装

我的选择几乎仅限于字符串处理。

用户将提供一个输入参数,它将是块的名称。

所以,

让我们假设

NAME=${USER_INPUT}

并且我们将使用$NAME作为参数来搜索将要搜索的xml块。

如何在 xml 文件中像这样转换通用 xml 块:

<block>
 <name>Bob</name>
 <address>USA</address>
 <email>bob@dogs.com</email>
 <phone>1234567</phone>
</block>

<block>
 <name>Peter</name>
 <food>France</address>
 <cell>peter@pizza.com</cell>
 <drinks>Coke</drinks>
 <car>Honda</car>
 <bike>Mountain bike</bike>
</block>

所以我想在这里实现的是获得满足我搜索的xml块,

例如NAME=Bob;

脚本的输出应该是属性文件格式

name=Bob
address=USA
email=bob@dogs.com
phone=1234567

这里要考虑的一件事是每个块的 xml 格式是不同的。每个 xml 块的节点都不相同。

使用 bash 和 GNU sed:

#!/bin/bash

NAME="Bob"
sed -n '/name>'${NAME}'/,/<\/block>/s/.*<\(.*\)>\(.*\)<.*/=/p' file.xml

输出:

name=Bob
address=USA
email=bob@dogs.com
phone=1234567