如何使用 ksh 脚本将通用 xml 格式块从 xml 文件转换为属性格式字符串
How to convert a generic xml format block to properties format String from an xml file using ksh script
具备条件:
我不能使用任何 XML 解析器工具,因为我没有权限,只读
我的xmllint版本不支持xpath,无法更新,只读
我没有 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
具备条件:
我不能使用任何 XML 解析器工具,因为我没有权限,只读
我的xmllint版本不支持xpath,无法更新,只读
我没有 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