我需要解析一个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做这个是可行的吗?
谢谢!
答案 0 :(得分:2)
<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>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
然后将您选择的XSLT处理器应用于XML文件。例如,使用xsltproc
:
xsltproc file.xsl file.xml
其中file.xsl
包含上述样式表,file.xml
是您的XML文件。