Сценарий Bash анализирует элементы XML в пары ключ = значение с помощью XMLStarlet - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть этот 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 Ответ

0 голосов
/ 05 сентября 2018
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"
...