因此,我需要帮助尝试在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中执行此操作?
答案 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>