解析XML文件Ubuntu

时间:2015-04-30 10:12:13

标签: xml bash parsing

我需要解析一个XML文件。我需要花时间代码(开始和结束)和与这个时间相关的句子。

XML文件是这样的:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Trans SYSTEM "trans-14.dtd">
<Trans scribe="jj" audio_filename="01" version="1" version_date="150211">
 <Episode>
  <Section type="report" startTime="0" endTime="50.28281021118164">
   <Turn startTime="0" endTime="50.28281021118164">
    <Sync time="0"/>

    <Sync time="1.195"/>
    Something
    <Sync time="2.654"/>
    Something 2
    <Sync time="4.356"/>
    Something 3
    <Sync time="9.321"/>
    Something 4
    <Sync time="22.171"/>
    Something 5
    <Sync time="28.351"/>
    Something 6
    <Sync time="35.708"/>
    Something 7
    <Sync time="43.04"/>
    Something 8
   </Turn>
  </Section>
 </Episode>

我需要获得最终结果:

0  1.195
1.195 2.654 Something
2.654 4.356 Something 2
4.356 9.321 Something 3
9.321 22.171 Something 4
22.171 28.351 Something 5
28.351 35.708 Something 6
35.708 43.04 Something 7
43.04 "endTime" Something 8

我正在与Ubuntu合作,有什么建议吗?用bash做这个是可行的吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

XSLT救援!使用样式表

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>

  <xsl:template match="@*|node()">
    <xsl:apply-templates select="@*|node()"/>
  </xsl:template>

  <xsl:template match="Sync">
    <xsl:value-of select="@time"/>
    <xsl:text> </xsl:text>
    <xsl:choose>
      <xsl:when test="following-sibling::Sync">
        <xsl:value-of select="following-sibling::Sync[1]/@time"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>"endTime"</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:text> </xsl:text>
    <xsl:value-of select="normalize-space(following-sibling::text()[1])"/>
    <xsl:text>&#xa;</xsl:text>
  </xsl:template>
</xsl:stylesheet>

然后将您选择的XSLT处理器应用于XML文件。例如,使用xsltproc

xsltproc file.xsl file.xml

其中file.xsl包含上述样式表,file.xml是您的XML文件。