在bash中解析XML响应,使用格式输出变量

时间:2017-06-18 21:04:04

标签: bash

因此,我需要帮助尝试在Bash中解析XML响应。让我们说我的回答是这样的。 (回复被删节,但仅显示我需要的信息。)

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <submissions>
        <submission>
            <submission_id><![CDATA[90210]]></submission_id>
            <last_file_update_datetime><![CDATA[2017-06-18 02:47:14.39864+02]]></last_file_update_datetime>
        </submission>
        <submission>
            <submission_id><![CDATA[90211]]></submission_id>
            <last_file_update_datetime><![CDATA[2017-06-11 15:48:04.279135+02]]></last_file_update_datetime>
        </submission>
    </submissions>
</response>

我想解析<submissions>中的每个块,并以这种格式将数据导出到数组中:

{submission_id}#{last_file_update_datetime}#1

例如,解析时响应应如下所示:

90210#2017-06-18 02:47:14.39864+02#1
90211#2017-06-11 15:48:04.279135+02#1

如何在Bash中执行此操作?

1 个答案:

答案 0 :(得分:0)

我发现我的经验是,使用XSLT最好处理涉及重新格式化XML的问题。我不知道你的盒子上是否有xsltproc,但如果是,那么这里有一些代码可以满足你的需求:

$ xsltproc stylesheet.xsl input.xml


        90210#2017-06-18 02:47:14.39864+02
        90211#2017-06-11 15:48:04.279135+02


~
$ cat stylesheet.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:output method="text" />

<xsl:template match="//submission">
  <xsl:value-of select="submission_id"/>#<xsl:value-of select="last_file_update_datetime"/>
</xsl:template>

</xsl:stylesheet>


$ cat input.xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
    <submissions>
        <submission>
            <submission_id><![CDATA[90210]]></submission_id>
            <last_file_update_datetime><![CDATA[2017-06-18 02:47:14.39864+02]]></last_file_update_datetime>
        </submission>
        <submission>
            <submission_id><![CDATA[90211]]></submission_id>
            <last_file_update_datetime><![CDATA[2017-06-11 15:48:04.279135+02]]></last_file_update_datetime>
        </submission>
    </submissions>
</response>