Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
伪XML到CSV_Xml_Bash_Xmlstarlet - Fatal编程技术网

伪XML到CSV

伪XML到CSV,xml,bash,xmlstarlet,Xml,Bash,Xmlstarlet,我有一个包含以下内容的文件: <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>

我有一个包含以下内容的文件:

<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>

解析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>

可以使用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
$ { 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 sel -t -m //AA -v 'BB[1]' -o ',' -v 'BB[2]' -n
RANDOM TEXT1,RANDOM TEXT2
RANDOM TEXT3,RANDOM TEXT4
RANDOM TEXT5,RANDOM TEXT6