Использование <xsl: choose> для форматирования элемента в зависимости от элемента-предка - PullRequest
0 голосов
/ 18 февраля 2012

Я новичок и пытаюсь использовать тест вэлемент, чтобы увидеть, является ли текущий узел потомком предыдущего узла.Затем я хочу применить соответствующий тег HTML к содержанию.Я новичок с выражениями xpath.

В частности, я хотел бы применить теги

к элементам , которые являются потомками элемента .Я хотел бы применить теги к элементам , которые являются потомками элементов .Мое лучшее предположение, что я должен использоватьэлемент в моемэлемент.Я попробовал несколько разных выражений xpath в тесте, но ни одно из них не сработало.

Вопрос: Естьлучший вариант для этого?

Вот мой документ xml, соответствующая часть.Структура документа не может быть изменена.

<table>
  <tgroup>
    <thead>
      <trow>
        <tcell>Column Head Text</tcell>
        <tcell>Column Head Text</tcell>
      </trow>
    </thead>
    <tbody>
      <trow>
        <tcell>Cell Text</tcell>
        <tcell>Cell Text</tcell>
      </trow>        
    </tbody>
  </tgroup>
 </table>

Я хочу использовать XSL / XPath для генерации таблицы со строкой заголовка и строками тела.Моя таблица стилей XSL выглядит следующим образом:

<xsl:template match="/">
  <html>
    <body>
    <xsl:apply templates />
    </body>
  </html>
</xsl:template>

<xsl:template match="table">
    <table>
        <xsl:apply-templates />
    </table>
</xsl:template>

<xsl:template match="tgroup">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="thead">
    <thead>
        <xsl:apply-templates />
    </thead>
</xsl:template>

<xsl:template match="tbody">
    <tbody>
        <xsl:apply-templates />
    </tbody>
</xsl:template>       

<xsl:template match="trow">
    <tr>
        <xsl:apply-templates />
    </tr>
</xsl:template>

<!-- MY TROUBLE STARTS HERE -->
<xsl:template match="tcell">
    <xsl:choose>
      <xsl:when test="current()!=descendant::tbody">
        <th>
          <xsl:value-of select="."/>
        </th>
      </xsl:when>
      <xsl:otherwise>
        <td>
          <xsl:value-of select="."/>
        </td>
      </xsl:otherwise>
    </xsl:choose>
</xsl:template>

Любая помощь будет оценена.

Пример вывода html

<table>
  <tgroup>
    <thead>
     <tr>
      <th>Column Head Text</th>
      <th>Column Head Text</th>
     <tr>
    </thead>
    <tbody>
      <tr>
       <td>Cell Text</td>
       <td>Cell Text</td>
      </tr>
    </tbody>
  </tgroup>
 </table>

Спасибо, M_66

1 Ответ

0 голосов
/ 18 февраля 2012
<xsl:template match="thead//tcell">
    <th>
        <xsl:value-of select="."/>
    </th>
</xsl:template>

<xsl:template match="tbody//tcell">
    <td>
        <xsl:value-of select="."/>
    </td>
</xsl:template>

или если вы все еще хотите использовать xsl:choose:

<xsl:template match="tcell">
    <xsl:choose>
        <xsl:when test="ancestor::thead">
            <th>
                <xsl:value-of select="."/>
            </th>
        </xsl:when>
        <xsl:otherwise>
            <td>
                <xsl:value-of select="."/>
            </td>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...