<xsl: if> условие не выполнено и выводит результат - PullRequest
0 голосов
/ 08 марта 2019

Приведенный ниже XML и соответствующий код XSL, почему мы получаем выходные данные, когда условие не выполняется?

Насколько я понимаю, поскольку существует несколько узлов чуда, он сначала рассмотрит один, а затем обнаружит, что условие ложно, и, следовательно, не должно показывать вывод.

XML:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="02-01.xsl"?>

<ancient_wonders>
    <wonder>
        <name language="English">Colossus of Rhodes1</name>
        <name language="Greek">Κολοσσός της Ρόδου1</name>
        <location>Rhodes, Greece</location>
        <height units="feet">107</height>
        <main_image filename="colossus.jpg" w="528" h="349"/>
        <source sectionid="101" newspaperid="21"></source>
    </wonder>

    <wonder>
        <name language="English">Colossus of Rhodes2</name>
        <name language="Greek">Κολοσσός της Ρόδου2</name>
        <location>Rhodes, Greece</location>
        <height units="feet">120</height>
        <main_image filename="colossus.jpg" w="528" h="349"/>
        <source sectionid="103" newspaperid="21"></source>
    </wonder>


</ancient_wonders>

XSLT:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <!-- Output Method -->
    <xsl:output method="html"/>

    <!-- Root Template -->
    <xsl:template match="/">

        <html>
            <body>

                <p><b>Output 1 :</b></p>
                <xsl:if test="ancient_wonders/wonder/height != 107">
                    <p>Height = <xsl:value-of select="." /></p>
                </xsl:if>

                <p><b>Output 2 :</b></p>
                <xsl:if test="ancient_wonders/wonder/height != 107">
                    <p>Height = <xsl:value-of select="ancient_wonders/wonder/height" /></p>
                </xsl:if>

            </body>
        </html>

    </xsl:template>

</xsl:stylesheet>

Выход:

Output 1 :

Height = Colossus of Rhodes1 Κολοσσός της Ρόδου1 Rhodes, Greece 107 Colossus of Rhodes2 Κολοσσός της Ρόδου2 Rhodes, Greece 120

Output 2 :

Height = 107

1 Ответ

2 голосов
/ 08 марта 2019

Выражение:

ancient_wonders/wonder/height

выбирает оба элемента height в вашем документе.Тест:

test="ancient_wonders/wonder/height != 107"

возвращает значение true, поскольку в сравниваемом наборе узлов есть хотя бы один узел, удовлетворяющий условию - см .: https://www.w3.org/TR/1999/REC-xpath-19991116/#booleans


Только xsl:value-of инструкция имеет аномалию возврата только значения первого узла выбранного набора узлов;эта аномалия была устранена в XSLT 2.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...