#xml #xslt
#xml #xslt
Вопрос:
Проблема в том,:
Я не могу показать все продукты в xml, используя choose и when в for-each, и я не знаю почему
Я пробовал использовать if, но результат был тот же. Я попытался добавить еще один для каждого, но это не сработало.
в catalogo2.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/catalogo">
<html>
<body>
<table border="1" width="100%" height="100%">
<th>Referencia</th><th>Nombre artículo</th><th>Descripción</th><th>Departamento</th><th>Categoría</th><th>Precio</th><th>Foto</th><th>Web</th>
<xsl:for-each select="producto">
<xsl:sort select="precio " data-type="number" order="descending"/>
<xsl:choose>
<xsl:when test="precio amp;<20 and precio amp;>0">
<tr bgcolor="blue">
<td>
<xsl:value-of select="referencia" /><br />
</td>
<td>
<xsl:value-of select="descripcion" /><br />
</td>
<td>
<xsl:value-of select="marca" /><br />
</td>
<td>
<a href="{web}"><img src="{foto_articulo}" width="180" height="200"/></a>
</td>
<td>
<xsl:value-of select="precio" /><br />
</td>
</tr>
</xsl:when>
<xsl:when test="precio amp;<60 and precio amp;>21">
<tr bgcolor="yellow">
<td>
<xsl:value-of select="referencia" /><br />
</td>
<td>
<xsl:value-of select="descripcion" /><br />
</td>
<td>
<xsl:value-of select="marca" /><br />
</td>
<td>
<a href="{web}"><img src="{foto_articulo}" width="180" height="200"/></a>
</td>
<td>
<xsl:value-of select="precio" /><br />
</td>
</tr>
</xsl:when>
<xsl:when test="precio amp;>60">
<tr bgcolor="purple">
<td>
<xsl:value-of select="referencia" /><br />
</td>
<td>
<xsl:value-of select="descripcion" /><br />
</td>
<td>
<xsl:value-of select="marca" /><br />
</td>
<td>
<a href="{web}"><img src="{foto_articulo}" width="180" height="200"/></a>
</td>
<td>
<xsl:value-of select="precio" /><br />
</td>
</tr>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
в catalogo.xml:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="catalogo1.xsl"?>
<catalogo>
<producto>
<referencia>999999</referencia>
<nombre-articulo>Samsung Galaxy S7</nombre-articulo>
<descripcion>Último smartphone de Samsung</descripcion>
<dep_y_cat>
<departamento>Electrónica</departamento>
<categoria>Moviles</categoria>
</dep_y_cat>
<colores>Negro</colores>
<marca>Samsung</marca>
<precio>500</precio>
<foto_articulo>images/samsung-galaxy.png</foto_articulo>
<web>http://www.samsung.com</web>
</producto>
<producto>
<referencia>996599</referencia>
<nombre-articulo>Iphone 7</nombre-articulo>
<descripcion>Otro móvil de Apple</descripcion>
<dep_y_cat>
<departamento>Electrónica</departamento>
<categoria>Moviles</categoria>
</dep_y_cat>
<colores>Gris</colores>
<marca>Apple</marca>
<precio>1000</precio>
<foto_articulo>images/iphone-7.png</foto_articulo>
<web>http://www.apple.com</web>
</producto>
<producto>
<referencia>999349</referencia>
<nombre-articulo>Lenovo PC 5 TB</nombre-articulo>
<descripcion>Súper portátil Lenovo</descripcion>
<dep_y_cat>
<departamento>Electrónica</departamento>
<categoria>Ordenadores</categoria>
</dep_y_cat>
<colores>Negro</colores>
<marca>Lenovo</marca>
<precio>1500</precio>
<foto_articulo>images/lenovo.png</foto_articulo>
<web>http://www.lenovo.com</web>
</producto>
<producto>
<referencia>921999</referencia>
<nombre-articulo>Peluche Doraemon</nombre-articulo>
<descripcion>Peluche relleno de algodon</descripcion>
<dep_y_cat>
<departamento>Juguetes</departamento>
<categoria>Peluches</categoria>
</dep_y_cat>
<colores>Azul</colores>
<marca>Desconocida</marca>
<precio>7</precio>
<foto_articulo>images/peluche-doraemon.png</foto_articulo>
<web>http://www.doraemon.com</web>
</producto>
<producto>
<referencia>902999</referencia>
<nombre-articulo>Muñeco Spiderman</nombre-articulo>
<descripcion>Otro muñeco de spiderman</descripcion>
<dep_y_cat>
<departamento>Juguetes</departamento>
<categoria>Muñecos</categoria>
</dep_y_cat>
<colores>Rojo</colores>
<marca>Marvel</marca>
<precio>25</precio>
<foto_articulo>images/muñeco-spiderman.png</foto_articulo>
<web>http://www.marvel.com</web>
</producto>
<producto>
<referencia>899999</referencia>
<nombre-articulo>iMac</nombre-articulo>
<descripcion>Ordenador Sobremesa Apple</descripcion>
<dep_y_cat>
<departamento>Electrónica</departamento>
<categoria>Ordenadores</categoria>
</dep_y_cat>
<colores>Plateado</colores>
<marca>Apple</marca>
<precio>2000</precio>
<foto_articulo>images/imac.png</foto_articulo>
<web>http://www.apple.com</web>
</producto>
<producto>
<referencia>999995</referencia>
<nombre-articulo>Tico Peluche</nombre-articulo>
<descripcion>Mono de peluche</descripcion>
<dep_y_cat>
<departamento>Juguetes</departamento>
<categoria>Peluches</categoria>
</dep_y_cat>
<colores>Marron</colores>
<marca>Desconocida</marca>
<precio>5</precio>
<foto_articulo>images/mono-tico.png</foto_articulo>
<web>https://www.elcorteingles.es</web>
</producto>
<producto>
<referencia>999399</referencia>
<nombre-articulo>Samsung Galaxy S6</nombre-articulo>
<descripcion>Otro smartphone de Samsung</descripcion>
<dep_y_cat>
<departamento>Electrónica</departamento>
<categoria>Moviles</categoria>
</dep_y_cat>
<colores>Gris</colores>
<marca>Samsung</marca>
<precio>400</precio>
<foto_articulo>images/samsung-galaxy-s6.png</foto_articulo>
<web>http://www.samsung.com</web>
</producto>
<producto>
<referencia>991999</referencia>
<nombre-articulo>Nokia 3310</nombre-articulo>
<descripcion>Antiguo movil Nokia</descripcion>
<dep_y_cat>
<departamento>Electrónica</departamento>
<categoria>Moviles</categoria>
</dep_y_cat>
<colores>Negro</colores>
<marca>Nokia</marca>
<precio>50</precio>
<foto_articulo>images/nokia.png</foto_articulo>
<web>http://www.nokia.com</web>
</producto>
<producto>
<referencia>909999</referencia>
<nombre-articulo>Huawei y5</nombre-articulo>
<descripcion>Movil clase media</descripcion>
<dep_y_cat>
<departamento>Electrónica</departamento>
<categoria>Moviles</categoria>
</dep_y_cat>
<colores>Blanco</colores>
<marca>Huawei</marca>
<precio>450</precio>
<foto_articulo>images/huawei-y5.png</foto_articulo>
<web>http://www.huawei.com</web>
</producto>
</catalogo>
Мне нужно изменить цвет tr, если значения> 60 или <40 или любые другие. Почему when не работает?
Редактировать:
Решено!
Я сделал это:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/catalogo">
<html>
<body>
<table border="1" width="100%" height="100%">
<tr>
<th>Referencia</th><th>Descripción</th><th>Marca</th><th>Foto</th><th>Precio</th></tr>
<xsl:for-each select="producto">
<xsl:sort select="precio " data-type="number" order="descending"/>
<tr>
<xsl:attribute name="bgcolor">
<xsl:choose>
<xsl:when test="precio amp;< 20">blue</xsl:when>
<xsl:when test="precio amp;> 60">yellow</xsl:when>
<xsl:otherwise>purple</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<td>
<xsl:value-of select="referencia" /><br />
</td>
<td>
<xsl:value-of select="descripcion" /><br />
</td>
<td>
<xsl:value-of select="marca" /><br />
</td>
<td>
<a href="{web}"><img src="{foto_articulo}" width="180" height="200"/></a>
</td>
<td>
<xsl:value-of select="precio" /><br />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Спасибо michael.hor257k за помощь.
Комментарии:
1. Вы не указали никаких выходных данных, если ни одно из ваших условий не выполнено. Какой цвет вы хотите, если цена 60 или больше?
2. например, фиолетовый.
3. В вашем решении отсутствует
tr
элемент для строки заголовка заголовки ваших столбцов не соответствуют фактическим данным в столбцах.4. посмотрите еще раз, пожалуйста. Я думаю, что теперь работает.
5. @GabrielMG: Пожалуйста, примите ответ Майкла. Спасибо.
Ответ №1:
Я бы посоветовал вам попробовать это так:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/catalogo">
<html>
<body>
<table border="1" width="100%" height="100%">
<tr>
<th>Referencia</th>
<th>Nombre artículo</th>
<th>Descripción</th>
<th>Departamento</th>
<th>Categoría</th>
<th>Precio</th>
<th>Foto</th>
<th>Web</th>
</tr>
<xsl:for-each select="producto">
<xsl:sort select="precio " data-type="number" order="descending"/>
<tr>
<xsl:attribute name="bgcolor">
<xsl:choose>
<xsl:when test="precio amp;< 20">blue</xsl:when>
<xsl:when test="precio amp;< 60">yellow</xsl:when>
<xsl:otherwise>purple</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<td>
<xsl:value-of select="referencia"/>
</td>
<td>
<xsl:value-of select="nombre-articulo"/>
</td>
<td>
<xsl:value-of select="descripcion"/>
</td>
<td>
<xsl:value-of select="dep_y_cat/departamento"/>
</td>
<td>
<xsl:value-of select="dep_y_cat/categoria"/>
</td>
<td>
<xsl:value-of select="precio" />
</td>
<td>
<a href="{web}"><img src="{foto_articulo}" width="180" height="200"/></a>
</td>
<td>
<xsl:value-of select="web" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Примечание:
- нет ненужного повторения одного и того же кода;
- упрощение тестов, используя преимущества
xsl:choose
выхода из первого теста, который возвращаетtrue
; - несколько других исправлений.
Рабочая демонстрация: https://xsltfiddle .liberty-development.net/ej9EGcu/1