【问题标题】:Parse an XML response in bash, output variables with formatting [duplicate]在 bash 中解析 XML 响应,输出带有格式的变量 [重复]
【发布时间】:2017-06-18 21:04:04
【问题描述】:

所以,我需要帮助尝试在 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>

我想对&lt;submissions&gt;中的每个块进行解析,并将数据以这种格式导出到数组中:

{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 中执行此操作?

【问题讨论】:

标签: bash


【解决方案1】:

根据我的经验,涉及重新格式化 XML 的问题最好用 XSLT 处理。我不知道 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>

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    相关资源
    最近更新 更多