我有一个包含以下内容的文件:
<AA>
<BB>RANDOM TEXT1</BB>
<BB>RANDOM TEXT2</BB>
</AA>
<AA>
<BB>RANDOM TEXT3</BB>
<BB>RANDOM TEXT4</BB>
</AA>
<AA>
<BB>RANDOM TEXT5</BB>
<BB>RANDOM TEXT6</BB>
</AA>
将其转换为CSV的最佳方法是:
RANDOM TEXT1,RANDOM TEXT2
RANDOM TEXT3,RANDOM TEXT4
RANDOM TEXT5,RANDOM TEXT6
答案 0 :(得分:0)
解析XML的最佳方法是使用XML解析器。
第一步,将伪XML“修复”为正确的XML:
$ { echo '<root>'; cat file; echo '</root>'; }
<root>
<AA>
<BB>RANDOM TEXT1</BB>
<BB>RANDOM TEXT2</BB>
</AA>
<AA>
<BB>RANDOM TEXT3</BB>
<BB>RANDOM TEXT4</BB>
</AA>
<AA>
<BB>RANDOM TEXT5</BB>
<BB>RANDOM TEXT6</BB>
</AA>
</root>
然后,使用XML解析器提取BB值,此处使用xmlstarlet
$ { echo '<root>'; cat file; echo '</root>'; } | xmlstarlet sel -t -v //BB
RANDOM TEXT1
RANDOM TEXT2
RANDOM TEXT3
RANDOM TEXT4
RANDOM TEXT5
RANDOM TEXT6
然后,加入线对
... | xmlstarlet sel -t -v '//BB' | paste -d, - -
RANDOM TEXT1,RANDOM TEXT2
RANDOM TEXT3,RANDOM TEXT4
RANDOM TEXT5,RANDOM TEXT6
可以使用xmlstarlet的选项完成,而不使用粘贴,但会牺牲可读性:
... | xmlstarlet sel -t -m //AA -v 'BB[1]' -o ',' -v 'BB[2]' -n
RANDOM TEXT1,RANDOM TEXT2
RANDOM TEXT3,RANDOM TEXT4
RANDOM TEXT5,RANDOM TEXT6