XSL помогает печатать переменные из нескольких узлов в одной строке - PullRequest
1 голос
/ 20 марта 2012

Очень плохо знаком с XSL (и XML в этом отношении), но мне нужно перейти через XML и напечатать необходимые выборки в одной строке для каждого запуска в данных xml. У меня проблема в том, что один выбор (время) находится в другом узле, чем другой 7. Я пока не могу понять, что мне нужно сделать, чтобы получить желаемый результат. Вот мои данные и таблица стилей, если кто-то не против помочь мне:

XSL STYLESHEET

<?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>Storage IO</h2>
   <table border="1">
     <tr bgcolor="#9acd32">
       <th>Time</th>
       <th>Reads per Second</th>
       <th>Writes per Second</th>
       <th>KB Read per Second</th>
       <th>KB Written per Second</th>
       <th>Read Cache Hit %</th>
       <th>Write Cache Hit %</th>
       <th>Sequential Read %</th>
       <th>Write Pending Tracks</th>
     </tr>
     <xsl:for-each select="/SymCLI_ML/Statistics/Request_Totals">
     <tr>
       <td><xsl:value-of select="time"/></td>
       <td><xsl:value-of select="r_per_second"/></td>
       <td><xsl:value-of select="w_per_second"/></td>
       <td><xsl:value-of select="kb_r_per_second"/></td>
       <td><xsl:value-of select="kb_w_per_second"/></td>
       <td><xsl:value-of select="r_cache_hit_pct"/></td>
       <td><xsl:value-of select="w_cache_hit_pct"/></td>
       <td><xsl:value-of select="sequential_r_pct"/></td>
       <td><xsl:value-of select="wp_tracks"/></td>
     </tr>
     </xsl:for-each>
   </table>
   </body>
   </html>
 </xsl:template>
 </xsl:stylesheet>

ФАЙЛ XML

<?xml version="1.0" standalone="yes" ?>
<?xml-stylesheet type="text/xsl" href="totals.xsl"?>
<SymCLI_ML>
  <Statistics>
    <time>Mon Mar 19 2012 15:24:53</time>
  </Statistics>
  <Statistics>
    <time>Mon Mar 19 2012 15:25:04</time>
    <Request>
      <dev_name>0052</dev_name>
      <pd_name>Not Visible</pd_name>
      <r_per_second>0</r_per_second>
      <w_per_second>0</w_per_second>
      <kb_r_per_second>0</kb_r_per_second>
      <kb_w_per_second>0</kb_w_per_second>
      <r_cache_hit_pct>N/A</r_cache_hit_pct>
      <w_cache_hit_pct>N/A</w_cache_hit_pct>
      <sequential_r_pct>N/A</sequential_r_pct>
      <wp_tracks>0</wp_tracks>
    </Request>
    <Request>
      <dev_name>1AAF</dev_name>
      <pd_name>Not Visible</pd_name>
      <r_per_second>0</r_per_second>
      <w_per_second>0</w_per_second>
      <kb_r_per_second>0</kb_r_per_second>
      <kb_w_per_second>0</kb_w_per_second>
      <r_cache_hit_pct>N/A</r_cache_hit_pct>
      <w_cache_hit_pct>N/A</w_cache_hit_pct>
      <sequential_r_pct>N/A</sequential_r_pct>
      <wp_tracks>0</wp_tracks>
    </Request>
    <Request>
      <dev_name>1B2F</dev_name>
      <pd_name>Not Visible</pd_name>
      <r_per_second>0</r_per_second>
      <w_per_second>0</w_per_second>
      <kb_r_per_second>0</kb_r_per_second>
      <kb_w_per_second>0</kb_w_per_second>
      <r_cache_hit_pct>N/A</r_cache_hit_pct>
      <w_cache_hit_pct>N/A</w_cache_hit_pct>
      <sequential_r_pct>N/A</sequential_r_pct>
      <wp_tracks>0</wp_tracks>
    </Request>
    <Request_Totals>
      <r_per_second>1032</r_per_second>
      <w_per_second>1309</w_per_second>
      <kb_r_per_second>28003</kb_r_per_second>
      <kb_w_per_second>19347</kb_w_per_second>
      <r_cache_hit_pct>74</r_cache_hit_pct>
      <w_cache_hit_pct>99</w_cache_hit_pct>
      <sequential_r_pct>6</sequential_r_pct>
      <wp_tracks>9994</wp_tracks>
    </Request_Totals>
  </Statistics>
</SymCLI_ML>

1 Ответ

0 голосов
/ 20 марта 2012

Попробуйте использовать:

<td><xsl:value-of select="../time"/></td>

или

<td><xsl:value-of select="/*/Statistics[1]/time"/></td>

в зависимости от того, какое <time> значение вы пытаетесь получить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...