Shell脚本问题:如何从一行xml文件中解析一个特殊的“单词”

时间:2015-05-22 21:37:57

标签: xml shell parsing ubuntu

我真的需要你的帮助。我有一个xml-log文件,我必须解析哪些内容信息。

这样的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<results>
<error file="mixed.cpp" line="11" id="unreadVariable" severity="style" msg="Variable 'wert' is assigned a value that is never used."/>
<error file="*" line="0" id="unmatchedSuppression" severity="style" msg="Unmatched suppression: missingIncludeSystem"/>
</result>

我必须将其解析为html表。我创建了一个blanco html:                错误摘要

<thead>
<tr> 
<th>Filename</th>
<th>Line</th>
<th>Testname</th>
<th>Severity</th>
<th>Severity_description</th>
</tr>
</thead> 

<tbody> 

</table>

所以我尝试读出xml mixed.cpp ,将其填入文件名

这是我的shell脚本(仅适用于Filename,因为它仍无效):

#!/bin/bash

INPUT=./static-code-analysis.xml
OUTPUT=./mixed_output.html
LINE_XML=3
while read LINE_XML
   do
      FILENAME=$(grep 'error file' $LINE_XML | awk -F\" '{print $2}')
      sed '/<tbody>/ a <tr> <td>$FILENAME</td> </tr>'       
$OUTPUT >abc
done < $INPUT

我想在前面的单词错误文件的每一行中抛出所有行,然后删除 mixed.cpp 并将其保存在FILENAME中。< / p>

不幸的是它不起作用。 FILENAME仍然是空的,我无法填写HTML。

有人能说我卡在哪里吗?

非常感谢;)

1 个答案:

答案 0 :(得分:2)

给出一个像这样的XSLT模板:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/results">
      <html>
      <body>
      <table>
      <thead>
      <tr>
      <th>Filename</th>
      <th>Line</th>
      <th>Testname</th>
      <th>Severity</th>
      <th>Severity_description</th>
      </tr>
      </thead>

      <tbody>
        <xsl:apply-templates select="error"/>
      </tbody>

      </table>
      </body>
      </html>
  </xsl:template>

  <xsl:template match="error">
    <tr>
      <td><xsl:value-of select="@file"/></td>
      <td><xsl:value-of select="@line"/></td>
      <td><xsl:value-of select="@id"/></td>
      <td><xsl:value-of select="@severity"/></td>
      <td><xsl:value-of select="@msg"/></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>

...和errors.xml一样(我必须修复原始语法,在一个地方使用results,在另一个地方使用result):

<?xml version="1.0" encoding="UTF-8"?>
<results>
<error file="mixed.cpp" line="11" id="unreadVariable" severity="style" msg="Variable 'wert' is assigned a value that is never used."/>
<error file="*" line="0" id="unmatchedSuppression" severity="style" msg="Unmatched suppression: missingIncludeSystem"/>
</results>

......以下命令:

xsltproc template.xsl errors.xml

...会发出一个看起来像你要求的HTML文件。