在bash中生成XML,需要一些有效的想法

问题描述:

我需要在bash中生成XML文件(尽管在C/C++/UNIX上工作了一段时间,但我还是bash /脚本语言的新手)。现在,我生成这样的事情,这是非常平坦的在bash中生成XML,需要一些有效的想法

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> 

在这方面,我觉得有很多的机会,使错误的,并在C++编码了这么久之后,我觉得应该有一个更好的结构化的方式代码....任何想法是赞赏....或任何材料,你认为,我应该先学习,PLZ张贴在这里....谢谢...

+3

在Bash中这样做听起来像一个非常unforgiving的任务。我强烈建议使用具有XML库的语言,例如Python或Ruby。 –

+0

另外,问题是什么? –

+0

^嘿oli,很高兴再次见到你......我只是原型设计,我可能需要使用bash进行完整的项目,因为一些遗留原因....不确定但是...... – howtechstuffworks

您正在寻找类似的东西,如xmlstarletdepyx子命令允许您将PYX markup转换为XML。

这可能足以满足您的原型设计目的。否则,您可能需要在Ruby,Python或Perl中查看更全面的XML库。

+1

是的。另请参阅http://*.com/questions/9898939/handling-long-edit-lists-in-xmlstarlet(我在从shell脚本构建大型XML文档时使用过),以及http://*.com/。 a/9882528/14122作为使用示例。 –

它通常是容易只是引用你的字符串,而不必使用特殊的变量为特殊字符,例如,而不是

text=$st$1$et 
echo $text 

只使用

echo "<$1>" 

或 的printf“<%S >“$ 1

至于结构,bash确实有数组,你可能可以使用属性,但唯一的方法来通过它们功能是通过名称,然后你必须跳过箍环得到的值:

a=(foo bar baz) 
f() { 
    eval printf "\${$1[1]}" 
} 
f a 
=> bar