Генерация 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
Другие вопросы по тегам