【问题标题】:Convert xml file to csv in shell script?在shell脚本中将xml文件转换为csv?
【发布时间】:2012-12-31 08:36:18
【问题描述】:

我正在尝试将 xml 文件转换为 csv 文件。我有一个这样的输入 xml 文件:

<Row>
  <Cell>
    <Data Type="String" >START</Data>
  </Cell>
  <Cell>
    <Data Type="DateTime" >2013-01-15T21:30:42</Data>
  </Cell>
  <Cell>
    <Data Type="String" ></Data>
  </Cell>
  <Cell>
    <Data Type="String" >Start 'suite8'</Data>
  </Cell>
  <Cell>
    <Data Type="String" >Test 'suite8' started</Data>
  </Cell>
  <Cell>
    <Data Type="String" ></Data>
  </Cell>
</Row>
<Row/>
<Row>
  <Cell>
    <Data Type="String" >START_TEST_CASE</Data>
  </Cell>
  <Cell>
    <Data Type="DateTime" >2013-01-15T21:30:42</Data>
  </Cell>
  <Cell>
    <Data Type="String" ></Data>
  </Cell>
  <Cell>
    <Data Type="String" >Start 'case1'</Data>
  </Cell>
  <Cell>
    <Data Type="String" >Test Case 'case1' started</Data>
  </Cell>
  <Cell>
    <Data Type="String" >case1</Data>
  </Cell>
</Row>

我对标签&lt;Data Type="String" &gt;&lt;/Data&gt; 之间的位感兴趣。此外,当标签&lt;Row&gt; 出现时应该开始一个新行。

我想要的输出 csv 文件应该是这样的:

START,2013-01-15T21:30:42,,Test 'suite8' started 

START_TEST_CASE,2013-01-15T21:30:42,,Start 'case1',Test Case 'case1' started,case1

我希望这足够清楚,非常感谢任何帮助:) 谢谢!

【问题讨论】:

  • 你最好的选择是一个 perl 或 python 脚本,它只有几行,但比任何 shell/grep/sed/awk 都更健壮和更快地编写。工作。你愿意接受这样的选择吗?
  • 您确实意识到您想要的输出实际上不是格式正确的 CSV?您的行之间的“列”数不同......
  • 你应该使用 XML 解析器。
  • sds:我对其他选项持开放态度,但我对 perl 或 python 脚本的了解更少。我是新手:(
  • tink:我现在意识到了,谢谢:)

标签: xml linux shell csv


【解决方案1】:

看看 xslt 样式表和xsltproc 命令。如果它只是无条件地将所有数据从单元格标记中转换为以逗号分隔的值的行,那么它是一个相对简单的样式表。

快速搜索得到:XML to CSV Using XSLT 通过对您的 xml 进行一些调整,它应该可以满足您的需要。

【讨论】:

  • 谢谢你,我会试试的! :)
【解决方案2】:

使用 Bash 解析 XML 之前已在此处解决:

How to parse XML in Bash?

也就是说,这似乎是一种痛苦的生活方式。

【讨论】:

  • 看起来确实很痛苦,aarrgghh! :)
猜你喜欢
  • 2011-06-18
  • 2017-06-24
  • 2016-04-28
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2016-05-29
  • 2020-02-08
相关资源
最近更新 更多