2017-06-18 76 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>