我有下面的XML文件。我需要在Type
和步骤编号中输出包含“step”的Headline
个元素Event
和Headline
。
<?xml version="1.0" encoding="ISO-8859-1"?>
<Testlog>
<Event Timestamp="27-Dec-2012 04:25:12.247 PM" Type="Script End" Headline="Script end [DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003]" Result="WARNING">
<Property script_name="DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003"/>
<Property script_id="DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003.java"/>
</Event>
<Event Timestamp="27-Dec-2012 04:16:33.335 PM" Type="General" Headline="_FRMWK.SystemLibrary.Sys_TmxProcesses logStepBegin: Step: 2.001; Action: ImportACU; Narrative: Import ACU settings based on '' ; TestName: DseBalanceInquiry_FC_Test_003" Result="INFORMATION">
<Property script_name="DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003"/>
<Property line_number="64"/>
<Property script_id="DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003.java"/>
</Event>
</Testlog>
我的XSLT代码为我提供了包含“step”的标题列表。如果我想在一个单独的行中获取步骤编号,我该如何实现它?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Report</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Title</th>
<th style="text-align:left">Artist</th>
<th style="text-align:left">Step</th>
<th style="text-align:left">Headline</th>
</tr>
<xsl:for-each select="Testlog/Event[contains(@Headline, 'Step:')]">
<tr>
<td><xsl:value-of select="@Type"/></td>
<td><xsl:value-of select="@Result"/></td>
<td><xsl:value-of select="@Step"/></td>
<td><xsl:value-of select="@Headline"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
以下样式表可以满足您的需求。这一行:
<xsl:value-of select="substring-before(substring-after(@Headline,'Step: '),';')"/>
使用substring-after和substring-before的组合提取作为步骤编号的Headline
属性的一部分。
另外,我已将列标题更改为更有意义的内容。显然,你是从W3Schools带走的。在描述您的意图时请小心:我相信您不希望“单独行中的步骤编号”。您希望步骤编号位于同一行并且意味着“在单独的列中”,对吧?
<强>样式表强>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Report</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Type</th>
<th style="text-align:left">Result</th>
<th style="text-align:left">Step Number</th>
<th style="text-align:left">Headline</th>
</tr>
<xsl:for-each select="Testlog/Event[contains(@Headline, 'Step:')]">
<tr>
<td><xsl:value-of select="@Type"/></td>
<td><xsl:value-of select="@Result"/></td>
<td><xsl:value-of select="substring-before(substring-after(@Headline,'Step: '),';')"/></td>
<td><xsl:value-of select="@Headline"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<html>
<body>
<h2>Report</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Type</th>
<th style="text-align:left">Result</th>
<th style="text-align:left">Step Number</th>
<th style="text-align:left">Headline</th>
</tr>
<tr>
<td>General</td>
<td>INFORMATION</td>
<td>2.001</td>
<td>_FRMWK.SystemLibrary.Sys_TmxProcesses logStepBegin: Step: 2.001; Action: ImportACU; Narrative: Import ACU settings
based on '' ; TestName: DseBalanceInquiry_FC_Test_003
</td>
</tr>
</table>
</body>
</html>