条件:
我无法使用任何XML解析器工具,因为我没有权限,只读
我的xmllint版本不支持xpath,我无法更新,只读
我没有xmlstarlet,无法安装
我的选项仅限于String处理。
输入参数将由用户提供,它将是块的名称。
所以,
让我们假设
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块的节点都不相同。
答案 0 :(得分:1)
使用bash和GNU sed:
#!/bin/bash
NAME="Bob"
sed -n '/name>'${NAME}'/,/<\/block>/s/.*<\(.*\)>\(.*\)<.*/\1=\2/p' file.xml
输出:
name=Bob address=USA email=bob@dogs.com phone=1234567