2017-06-18 79 views
0

所以,我需要帮助试图解析Bash中的XML响应。假设我的回答是这样的。 (响应被删节,但只显示我所需要的信息。)在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

只是庆典?或bash + coreutils(如sed,awk等)? –

+0

这里有一些其他可能重复的问题:https://stackoverflow.com/questions/893585/how-to-parse-xml-in-bash https://stackoverflow.com/questions/2222150/extraction-of-data -from-a-simple-xml-file https://stackoverflow.com/questions/17333755/extract-xml-value-in-bash-script https://stackoverflow.com/questions/20248037/read-from-xml -to-庆典 –

回答

0

我发现我的经验是,涉及重新格式化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>