如何使用 XSLT 调用 XML 元素



我的XML有以下数据。 我需要获取类型,标题,标题中包含"步骤"和步骤编号

<?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:25:10.747 PM" Type="Export Event" Headline="getProperty on the List ABC: Trace Facility" Result="PASS">
        <Property line_number="434"/>
        <Property script_name="DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003"/>
    </Event>
<Event Timestamp="27-Dec-2012 04:16:33.226 PM" Type="General" Headline="_FRMWK.SystemLibrary.Sys_TmxProcesses logStepBegin: Step: 2; Action: node; Narrative: Node: &apos;DseBalanceInquiry_FC.RST_ACU_DEF(T)&apos;  &apos;Use ACU to Import the default ACU settings xml file.  When importing, all the checkboxes are checked in the Application list.  i.e. Perform the RestoreAcuDefaults keyword  &apos;; TestName: DseBalanceInquiry_FC_Test_003" Result="INFORMATION">
        <Property script_name="DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003"/>
        <Property line_number="61"/>
        <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 &apos;&apos; ; 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>

编辑了代码。这给了我有步骤的标题列表,如果我想在单独的行中获取步骤号,我该如何实现?

     <?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>

如果您的意思是要将标题包含"Step:"的事件作为附加表格行添加到报告中,请替换此行:

<xsl:for-each select="Testlog/Event[@Result='WARNING']">

跟:

<xsl:for-each select="Testlog/Event[@Result='WARNING' or contains(@Headline, 'Step:')]">

如果没有,那么请进一步澄清。


还有一个问题,如果我想在单独的行中获取步骤号, 我怎样才能实现它?–

我想你的意思是单独的,而不是行?如果是这样,请将另一个 <td> 元素添加到表中(在 for-each 循环中):

<td><xsl:value-of select="substring-before(substring-after(@Headline, 'Step:'), ';')"/></td>

然后将相应的 <th> 元素添加到上面的表头。