xml - Bash 脚本使用 XMLStarlet 将 xml 元素解析为 key=value 对
问题描述
我有这个带有用户数据的 xml 文件(文件名:myFile.xml):
<?xml version="1.0" encoding="utf-8"?>
<params>
<username>jDoe</username>
<password>abc123</password>
<firstname>John</firstname>
<lastname>Doe</lastname>
<email>jdoe@example.com</email>
<country>Germany</country>
</params>
我可以在我的 bash 脚本中打开它并使用“for”循环来迭代它的内容:
for i in $(xmlstarlet select -t -v '/params/*' myFile.xml)
do
echo $i
done
当我运行它时,我得到:
jDoe
abc123
John
Doe
jdoe@example.com
Germany
如何将每个值与其相对名称相关联,并创建一个 bash 脚本变量,如下所示:
username="jDoe"
password="abc123"
firstname="John"
lastname="Doe"
email="jdoe@example.com"
country="Germany"
换句话说,对于每个标签,我想读取它的名称和值,然后从中创建一个 bash 变量。IE:
tagname="value"
我更喜欢遍历标签,因为它们比这个例子要多得多,而且并不总是一样的。
有什么建议么?
解决方案
xmlstarlet select --template --match "//params/*" --value-of "concat(name(),'=\"',text(),'\"')" -n file.xml
输出:
用户名="jDoe" 密码="abc123" 名字="约翰" 姓氏="Doe" 电子邮件="jdoe@example.com" 国家=“德国”
推荐阅读
- python - 将多个 DataFrame 附加到多个现有的 Excel 工作表
- python - 在数据框中复制单行
- c# - 即使我正在等待也无法调试异步方法
- javascript - 通过提供 start 和 endtime 参数从末尾到第一项查询分页 API 端点
- node.js - Jest 自定义测试环境不能使用绝对路径
- drivine - 如何将connectionPooling和超时相关的属性传递给Drivine connectionProvider
- excel - VBA:转换数字格式/刷新单元格
- reactjs - 带有 React UI(脚手架)的 Laravel 8 的 Docker 文件
- c++ - 在点数组中找到最小值的算法
- assembly - ARM 程序集无法从地址加载