Автор |
Сообщение |
Ex_Soft
Новичок
Зарегистрирован: 13.03.2009
Сообщения: 12
|
[13626]
Вт Мар 17, 2009 23:15
Как из множества выбрать конкретное значение
Нужно (на пальцах):
Код:
<Smths>
<Smth Id="1">1st</Smth>
<Smth Id="2">2nd</Smth>
<Smth Id="3">3rd</Smth>
<Smth Id="4">4th</Smth>
<Smth Id="5">5th</Smth>
</Smths>
запихнуть в колонку в таблице
Код:
Smth1,1st
Smth2,2nd
Smth3,3rd
Smth4,4th
Smth5,5th
в гольову ничего, кроме как а-ля (на пальцах):
Код:
<table>
<tr>
<td>Smth1</td>
<td>
<xsl:for-each select="Smths">
<xsl:if test="@Id=1">.</xsl:if>
</xsl:for-each>
</td>
</tr>
<tr>
<td>Smth2</td>
<td>
<xsl:for-each select="Smths">
<xsl:if test="@Id=2">.</xsl:if>
</xsl:for-each>
</td>
</tr>
...
<tr>
<td>Smth5</td>
<td>
<xsl:for-each select="Smths">
<xsl:if test="@Id=5">.</xsl:if>
</xsl:for-each>
</td>
</tr>
</table>
||
Код:
<table>
<tr>
<td>Smth1</td>
<td>
<xsl:for-each select="Smths/Smth@Id=1">.</xsl:for-each>
</td>
</tr>
<tr>
<td>Smth2</td>
<td>
<xsl:for-each select="Smths/Smth@Id=2">.</xsl:for-each>
</td>
</tr>
...
<tr>
<td>Smth5</td>
<td>
<xsl:for-each select="Smths/Smth@Id=5">.</xsl:for-each>
</td>
</tr>
</table>
но все это как-то ректально выглядит... Как это можно сделать по-людськи?
_________________ "Helo, word!" - 17 errors 56 warnings
|
Vasilisk
Наставник
Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
|
[13628]
Ср Мар 18, 2009 00:34
Код: <table>
<xsl:for-each select="Smths/Smth">
<tr>
<td>
<xsl:value-of select="concat('Smth', @Id)"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
</table>
_________________ С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
|
Ex_Soft
Новичок
Зарегистрирован: 13.03.2009
Сообщения: 12
|
[13631]
Ср Мар 18, 2009 09:32
I'm so sorry... Плохо обЪяснил. Левая колонка таблицы УЖЕ заполнена изначально в шаблоне статической информацией. Причем там все, что угодно м.б. Smth - то я так. Для примера. В общем виде:
Таблица ДО:
Код:
+------+---+
|qwerty| |
+------+---+
|asdfgh| |
+------+---+
|zxcvbn| |
+------+---+
Таблица ПОСЛЕ:
Код:
+------+---+
|qwerty| 2 |
+------+---+
|asdfgh| 3 |
+------+---+
|zxcvbn| 1 |
+------+---+
_________________ "Helo, word!" - 17 errors 56 warnings
|
Vasilisk
Наставник
Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
|
[13632]
Ср Мар 18, 2009 22:42
Вариант 1 - <xsl:choose>
Вариант 2 - msxsl:node-set()
_________________ С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
|
Ex_Soft
Новичок
Зарегистрирован: 13.03.2009
Сообщения: 12
|
[13634]
Чт Мар 19, 2009 18:20
Vasilisk писал(а):
1 - <xsl:choose>
Гм... Ну и чем это
Код:
<tr>
<td>Value 1</td>
<td>
<xsl:for-each select="value">
<xsl:choose>
<xsl:when test="@id=1">
<xsl:value-of select="." />
</xsl:when>
</xsl:choose>
</xsl:for-each>
</td>
</tr>
отличается от:
Код:
<tr>
<td>Value 1</td>
<td>
<xsl:for-each select="value">
<xsl:if test="@id=1">
<xsl:value-of select="." />
</xsl:if>
</xsl:for-each>
</td>
</tr>
???
Vasilisk писал(а):
2 - msxsl:node-set()
Исходя из msxsl, я так понял - это какая-то M$'совская весчЪ?
_________________ "Helo, word!" - 17 errors 56 warnings
|
Vasilisk
Наставник
Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
|
[13636]
Чт Мар 19, 2009 23:12
Ex_Soft писал(а): Гм... Ну и чем это
Код: <tr>
<td>Value 1</td>
<td>
<xsl:for-each select="value">
<xsl:choose>
<xsl:when test="@id=1">
<xsl:value-of select="." />
</xsl:when>
</xsl:choose>
</xsl:for-each>
</td>
</tr>
отличается от:
Код: <tr>
<td>Value 1</td>
<td>
<xsl:for-each select="value">
<xsl:if test="@id=1">
<xsl:value-of select="." />
</xsl:if>
</xsl:for-each>
</td>
</tr> ???
А если так?
Код: <xsl:for-each select="value">
<tr>
<td>
<xsl:choose>
<xsl:when test="@id=1">
Value 1
</xsl:when>
<xsl:when test="@id=2">
Value 2
</xsl:when>
..................
</xsl:choose>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
Ex_Soft писал(а): Vasilisk писал(а): 2 - msxsl:node-set()
Исходя из msxsl, я так понял - это какая-то M$'совская весчЪ?
Да, но подобные функции есть во многих парсерах
_________________ С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
|
Ex_Soft
Новичок
Зарегистрирован: 13.03.2009
Сообщения: 12
|
[13638]
Чт Мар 19, 2009 23:49
Vasilisk писал(а):
А если так?
Не... Ситуация с точностью до наоборот: не данные управляют видом шаблона, а шаблон размещает данные куда необходимо.
_________________ "Helo, word!" - 17 errors 56 warnings
|
Vasilisk
Наставник
Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
|
[13639]
Пт Мар 20, 2009 00:57
Ex_Soft писал(а): Не... Ситуация с точностью до наоборот: не данные управляют видом шаблона, а шаблон размещает данные куда необходимо. В чем принципиальная разница?
_________________ С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
|
Ex_Soft
Новичок
Зарегистрирован: 13.03.2009
Сообщения: 12
|
[13642]
Пт Мар 20, 2009 09:15
Vasilisk писал(а):
В чем принципиальная разница?
Порядок следования value в xml - неопределен. Соответственно мы каждый раз будем иметь разный random'ный вид на выходе. С таким же успехом можно было вообще не заморачиваться и возвращать пару ValueName-Value прям в xml'ине. Требуется же зафиксировать расположение ValueName вне зависимости от порядка/наличия в xml.
Код:
<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" href="TestRightColumn.xsl"?>
<root>
<value id="1">value_1</value>
<value id="3">value_3</value>
<value id="2">value_2</value>
</root>
Код:
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.0 Transitional//EN" encoding="windows-1251" />
<xsl:template match="root">
<html>
<head>
<title>Test Right Column</title>
</head>
<body>
<table border="1">
<tr>
<td>Value 2</td>
<td>
<xsl:for-each select="value">
<xsl:if test="@id=2">
<xsl:value-of select="." />
</xsl:if>
</xsl:for-each>
</td>
</tr>
<tr>
<td>Value 3</td>
<td>
<xsl:for-each select="value">
<xsl:if test="@id=3">
<xsl:value-of select="." />
</xsl:if>
</xsl:for-each>
</td>
</tr>
<tr>
<td>Value 1</td>
<td>
<xsl:for-each select="value">
<xsl:if test="@id=1">
<xsl:value-of select="." />
</xsl:if>
</xsl:for-each>
</td>
</tr>
</table>
<hr />
<table border="1">
<tr>
<td>Value 2</td>
<td>
<xsl:for-each select="value[@id=2]">
<xsl:value-of select="." />
</xsl:for-each>
</td>
</tr>
<tr>
<td>Value 3</td>
<td>
<xsl:for-each select="value[@id=3]">
<xsl:value-of select="." />
</xsl:for-each>
</td>
</tr>
<tr>
<td>Value 1</td>
<td>
<xsl:for-each select="value[@id=1]">
<xsl:value-of select="." />
</xsl:for-each>
</td>
</tr>
</table>
<hr />
<table border="1">
<tr>
<td>Value 2</td>
<td>
<xsl:for-each select="value">
<xsl:choose>
<xsl:when test="@id=2">
<xsl:value-of select="." />
</xsl:when>
</xsl:choose>
</xsl:for-each>
</td>
</tr>
<tr>
<td>Value 3</td>
<td>
<xsl:for-each select="value">
<xsl:choose>
<xsl:when test="@id=3">
<xsl:value-of select="." />
</xsl:when>
</xsl:choose>
</xsl:for-each>
</td>
</tr>
<tr>
<td>Value 1</td>
<td>
<xsl:for-each select="value">
<xsl:choose>
<xsl:when test="@id=1">
<xsl:value-of select="." />
</xsl:when>
</xsl:choose>
</xsl:for-each>
</td>
</tr>
</table>
<hr />
<table border="1">
<xsl:for-each select="value">
<tr>
<td>
<xsl:choose>
<xsl:when test="@id=1">
Value 1
</xsl:when>
<xsl:when test="@id=2">
Value 2
</xsl:when>
<xsl:when test="@id=3">
Value 3
</xsl:when>
</xsl:choose>
</td>
<td>
<xsl:value-of select="." />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Последняя таблица, как раз, демонстрирует зависимость выхлопа от xml.
_________________ "Helo, word!" - 17 errors 56 warnings
|
Vasilisk
Наставник
Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
|
[13646]
Пт Мар 20, 2009 22:34
Ex_Soft писал(а): Порядок следования value в xml - неопределен. Соответственно мы каждый раз будем иметь разный random'ный вид на выходе. С таким же успехом можно было вообще не заморачиваться и возвращать пару ValueName-Value прям в xml'ине. Требуется же зафиксировать расположение ValueName вне зависимости от порядка/наличия в xml.
<xsl:sort> религия не позволяет использовать?
_________________ С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
|
Ex_Soft
Новичок
Зарегистрирован: 13.03.2009
Сообщения: 12
|
[13648]
Сб Мар 21, 2009 08:10
Vasilisk писал(а):
<xsl:sort> религия не позволяет использовать?
Ну и к чему ее применять-то? Если нуна
Код:
+------+---+
|qwerty| 2 |
+------+---+
|asdfgh| 3 |
+------+---+
|zxcvbn| 1 |
+------+---+
??? Левый столбец (описание) сторого фиксирован. А уж какие ID'шки под это дело получатся в правом - неизвестно никому.
_________________ "Helo, word!" - 17 errors 56 warnings
|
Vasilisk
Наставник
Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
|
[13649]
Вс Мар 22, 2009 00:40
Ex_Soft писал(а): А уж какие ID'шки под это дело получатся в правом - неизвестно никому.
Вы думаете, что Вы пишете? Если это никому неизвестно, то порядок может быть полностью произвольный
_________________ С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
|
Ex_Soft
Новичок
Зарегистрирован: 13.03.2009
Сообщения: 12
|
[13650]
Вс Мар 22, 2009 09:21
Vasilisk писал(а):
Если это никому неизвестно, то порядок может быть полностью произвольный
Не совсем так. Конечно, с полной неопределенностью, я, как говорится, перегнул палку. Дело обстоит так: ЭстЪ выходной строго фиксированный шаблон. Менять расположение строк в левом столбце - нельзя. А то, что стоит в правом добавлялось в БД в таблицу с identity. Причем в разное время (главное, что не подряд одно за другим). Соответственно ID'шки получаются разные, разбросанные, и, самое главное - в контексте сортировки - могут быть расположены не монотонно увеличиваясь/уменьшаясь в привязке к фиксированному левому столбцу.
_________________ "Helo, word!" - 17 errors 56 warnings
|