Regex XSLT 2.0分析字符串选项不起作用?
我有一个如下所示的xml结构Regex XSLT 2.0分析字符串选项不起作用?,regex,xslt,xslt-2.0,Regex,Xslt,Xslt 2.0,我有一个如下所示的xml结构 <warning file="project\Src\a.c" line="45" message="intended 7.7. 3218 Decl File scope static, 'DSVS_SLOW_CH_RCVD_INFO_INIT', only accessed in one function."/> <warning file="project\Src\x.c" line="132" message="deviation 321
<warning file="project\Src\a.c" line="45" message="intended 7.7. 3218 Decl File scope static, 'DSVS_SLOW_CH_RCVD_INFO_INIT', only accessed in one function."/>
<warning file="project\Src\x.c" line="132" message="deviation 3218 Decl File scope static,">
我希望文件行和消息以表格格式出现。消息与正则表达式匹配,并且必须获取
消息包含等级预期或偏差可选标准、规则和描述。它被一个空间隔开
在我的示例中,第一个标记
file=project\Src\a.c,line=45,rank=designed,标准7.7。规则3218和说明=Decl文件范围
在第二个示例中,缺少标准
我需要的输出是
<tr>
<td>Filename</td>
<td>Line</td>
<td>Rank</td>
<td>Coding Standard</td>
<td>Rule</td>
<td>Description</td>
</tr>
<tr>
<td>project\Src\a.c </td>
<td>45</td>
<td>intended</td>
<td>7.7.</td>
<td>3218</td>
<td>Decl File scope...</td>
</tr>
<tr>
<td>project\Src\x.c </td>
<td>132</td>
<td>deviation</td>
<td></td>
<td>3218</td>
<td>Decl File scope...</td>
</tr>
到目前为止,我所尝试的是
<tr>
<td>Filename</td>
<td>Line</td>
<td>Rank</td>
<td>Standard</td>
<td>Rule</td>
<td>Description</td>
</tr>
<xsl:for-each select="issues/warning">
<tr>
<td><xsl:value-of select="@file"/></td>
<td><xsl:value-of select="@line"/></td>
</tr>
<xsl:analyze-string select="@message"
regex="\s*([intended|deviation])\s+(.*)\s+(\d+)\s+(.*)">
<xsl:matching-substring>
<tr>
<td><xsl:value-of select="regex-group(1)"/></td>
<td><xsl:value-of select="regex-group(2)"/></td>
<td><xsl:value-of select="regex-group(3)"/></td>
<td><xsl:value-of select="regex-group(4)"/></td>
</tr>
</xsl:matching-substring>
<xsl:non-matching-substring>
<tr>
<tr>
<td><xsl:value-of select="."/></td>
</tr>
</tr>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:for-each>
但这并没有达到我的预期。行和值混淆了。
如何检测是否存在可选标准?
任何解决此问题的提示都将不胜感激。我认为您可能需要的表达式是\s*预期的|偏差\s++.++\s++?\d++\s++.*注意?对于零或一个事件 试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" indent="yes" html-version="5"/>
<xsl:template match="/">
<xsl:for-each select="issues/warning">
<tr>
<td><xsl:value-of select="@file"/></td>
<td><xsl:value-of select="@line"/></td>
<xsl:analyze-string select="@message"
regex="\s*(intended|deviation)\s+(.+\s+)?(\d+)\s+(.*)">
<xsl:matching-substring>
<td><xsl:value-of select="regex-group(1)"/></td>
<td><xsl:value-of select="regex-group(2)"/></td>
<td><xsl:value-of select="regex-group(3)"/></td>
<td><xsl:value-of select="regex-group(4)"/></td>
</xsl:matching-substring>
</xsl:analyze-string>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
请参见注意,XML中有警告元素,但XSLT正在查找错误元素。这是打字错误吗?谢谢@谢谢你。。我的例子只是一个例子。我在xml中也有错误标记。我应该编辑它。