Генерация XML в bash, нужны эффективные идеи
Мне нужно сгенерировать файл XML на bash(я новичок в языках bash/scripting, несмотря на то, что некоторое время работал над C/C++/UNIX). Прямо сейчас я генерирую что-то вроде этого, которое довольно плоское
st='<'
et='>'
sl='/'
-------------------
stag() {
text=$st$1$et
echo $text >> output_file
}
--------------------
etag() {
text=$sl$1
stag $text
}
--------------------
attr() {
text=$1
echo $text >> output_file
}
--------------------
#--Function Call
stag "tag"
attr "xml"
etag "tag"
--------------------
#--output
<tag>xml</tag>
In this, I feel there are lots of chance to make errors and after coding in C++ for so long, I think there should be a better structured way to code.... Any thoughts is appreciated.... or any material you think, I should learn first, plz post here.... Thanks...
2 ответа
Вы ищете что-то вроде xmlstarlet. Подкоманда depyx позволяет преобразовывать разметку PYX в XML.
Этого может быть достаточно для создания прототипа. Если нет, то вам, вероятно, нужно взглянуть на более полнофункциональную библиотеку XML на Ruby, Python или Perl.
Обычно проще просто заключить в кавычки ваши строки, чем использовать специальные переменные для специальных символов, например, вместо
text=$st$1$et
echo $text
просто используйте
echo "<$1>"
или printf "<% s>" $ 1
Что касается структуры, в bash есть массивы, которые вы, возможно, могли бы использовать для атрибутов, но единственный способ передать их функциям - по имени, а затем вы должны перепрыгнуть через обручи, чтобы получить значения:
a=(foo bar baz)
f() {
eval printf "\${$1[1]}"
}
f a
=> bar