У меня есть XML-схема с элементом определенным из хза типа: булева как это:Сравнение значения xs: boolean в XSLT?
<xs:element name="useful"
minOccurs="1" maxOccurs="1"
type="xs:boolean"/>
Я пытаюсь использовать выбрать/когда/в противном случае блока в XSL для вывода что-то конкретное на основе стоимости что, как это:
<xsl:choose>
<xsl:when test="@useful = 0">No</xsl:when>
<xsl:otherwise>Yes</xsl:otherwise>
</xsl:choose>
Я перепробовал все изменения я могу думать для этого сравнения (с использованием истинно(), ложные(), 1, 0, удаление @, используя // @) и его всегда печатает «Да». Что я здесь делаю неправильно?
EDIT (по просьбе Мартина Honnen):
Вот пример XML, который используется:
<?xml version="1.0"?>
<functions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="functions.xsd">
<function>
<name>func1</name>
<useful>0</useful>
</function>
<function>
<name>func2</name>
<useful>1</useful>
</function>
</functions>
Это вызывает проблемы с помощью XSL: шаблон Я думаю, поэтому я использую XSL : для каждого цикла для каждой функции и для вывода чего-то конкретного для каждого полезного тега. xsl: шаблон можно использовать только на верхнем уровне xslt, правильно?
Полный файл XSLT является
<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><body>
<h2>Functions</h2>
<table border="1">
<tr>
<th>Functions</th>
<th>Useful</th>
</tr>
<xsl:for-each select="functions/function">
<tr>
<td>
<xsl:value-of select="name"/>
</td>
<td>
<xsl:choose>
<xsl:when test="@useful = 0">No</xsl:when>
<xsl:otherwise>Yes</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
</table>
</body></html>
</xsl:template>
</xsl:stylesheet>
Хороший вопрос, +1. См. Мой ответ для полного решения. –