xml - Bash 脚本使用 XMLStarlet 将 xml 元素解析为 key=value 对

标签 xml bash sh xmlstarlet

我有这个包含用户数据的 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"

我更喜欢遍历标签,因为它们比这个例子多得多,而且并不总是相同。

有什么建议吗?

最佳答案

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

输出:

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

关于xml - Bash 脚本使用 XMLStarlet 将 xml 元素解析为 key=value 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52189418/

相关文章:

linux - 我怎样才能得到实时值来特别在 BASH 中制作我自己的脚本,如附件所示

java - NumberFormatException 的含义是什么以及如何解决它?

Linux ssh bash fork 重试 : no child processes

linux - 从脚本 B 调用脚本 A,并将脚本 A 的输出写入文件

java - 删除 jaxb 输出中的外层元素

linux - 将1个文件复制到同一目录下的100个文件夹

c++ - haar cascade for face detection xml文件代码讲解OpenCV

bash - Tail 脚本用于从末尾写出文件的内容到匹配的模式

C# 序列化对象版本

java - 使用 Java 从 XML 中提取数据