Как я не могу напечатать значение в узле, используя not [arg] с xslt? - PullRequest
1 голос
/ 21 декабря 2011

У меня есть таблица с четырьмя столбцами, один из которых <type>. Я хочу отсортировать свои значения, а НЕ печатать строки с типом 1. Это мой стол:

<table border="1">
<tr bgcolor="#ccc">
<th>Namn</th>
<th>Modell</th>
<th>Pris</th>
<th>Typ</th>

</tr>

Это мои команды для сортировки:

<xsl:for-each select="//ad">

<xsl:sort select="type" order="descending" />
<xsl:sort select="name"/>
<xsl:sort select="model"/>

Я пытался использовать это значение выбора и смог напечатать только тип 2, но я не уверен, где добавить строку. - <xsl:apply-templates select="type[not(. = '1')]"> Итак, мой вопрос, где добавить его внутри для каждого цикла, и если он должен быть открытым или закрытым. Любые указатели очень приветствуются!

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
  <table border="1">
    <tr bgcolor="#ccc">
     <th>Namn</th>
     <th>Modell</th>
     <th>Pris</th>
     <th>Typ</th>
    </tr>
   <xsl:apply-templates select="ad[not(type=1)]">
    <xsl:sort select="type" data-type="number"
              order="descending" />
    <xsl:sort select="name"/>
    <xsl:sort select="model"/>
   </xsl:apply-templates>
  </table>
 </xsl:template>

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

 <xsl:template match="ad/*">
  <td><xsl:value-of select="."/></td>
 </xsl:template>
</xsl:stylesheet>

при применении к этому документу XML :

<t>
 <ad>
   <name>N1</name>
   <model>M1</model>
   <price>10</price>
   <type>2</type>
 </ad>
 <ad>
   <name>N2</name>
   <model>M2</model>
   <price>20</price>
   <type>1</type>
 </ad>
 <ad>
   <name>N3</name>
   <model>M3</model>
   <price>30</price>
   <type>1</type>
 </ad>
 <ad>
   <name>N4</name>
   <model>M4</model>
   <price>40</price>
   <type>3</type>
 </ad>
</t>

создает искомое значение,правильный результат :

<table border="1">
   <tr bgcolor="#ccc">
      <td>Namn</th>
      <th>Modell</th>
      <th>Pris</th>
      <th>Typ</th>
   </tr>
   <tr>
      <td>N4</td>
      <td>M4</td>
      <td>40</td>
      <td>3</td>
   </tr>
   <tr>
      <td>N1</td>
      <td>M1</td>
      <td>10</td>
      <td>2</td>
   </tr>
</table>
2 голосов
/ 21 декабря 2011

Трудно сказать, не видя вашего ввода и больше вашей программы, но пробовали ли вы это?

<xsl:for-each select="//ad[type != '1']">
  <xsl:sort select="type" order="descending" />
  <xsl:sort select="name"/>
  <xsl:sort select="model"/>
...