使用XMLStarlet编写Bash脚本解析XML元素为key=value对

3

我有一个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变量,例如:
tagname="value"

我更喜欢循环遍历标签,因为它们远不止这个示例,并且不总是相同的。

有什么建议吗?

1个回答

7
xmlstarlet select --template --match "//params/*" --value-of "concat(name(),'=\"',text(),'\"')" -n file.xml

Output:

username="jDoe"
password="abc123"
firstname="John"
lastname="Doe"
email="jdoe@example.com"
country="Germany"

文件名前的 -n 是什么意思? - dawg
@dawg:-n 在每个键值对之后添加一个新行。 - Cyrus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接