Атрибут узла дочерний узел элемента узла - PullRequest
2 голосов
/ 15 марта 2019

Рассмотрим следующий пример:

XML:

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

<ancient_wonders>

    <wonder myattribute = "Green">
        <name language="English">Colossus of Rhodes1</name>
    </wonder>

    <wonder myattribute = "Red">
        <name language="English">Colossus of Rhode2s</name>
    </wonder>

</ancient_wonders>

XSL:

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

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

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

        <html>
            <body>

                <p>Output 1 </p>
                <xsl:for-each select="//name//*">
                    <xsl:value-of select = "."/>
                </xsl:for-each>

                <p>Output 2</p>
                 <xsl:for-each select="//name/@*">
                    <xsl:value-of select = "."/>
                </xsl:for-each>

                <p>Output 3</p>
                 <xsl:for-each select="//name/*">
                    <xsl:value-of select = "."/>
                </xsl:for-each>

            </body>
        </html>

    </xsl:template>


</xsl:stylesheet>

(Выздесь можно увидеть выходные данные здесь )

Теперь мы видим, что name имеет атрибут language Теперь в этом случае является language дочерним узлом узла name узла?Если да, то почему я не могу увидеть это в выводе (ссылка выше)?

1 Ответ

5 голосов
/ 15 марта 2019

Выражение elem/* является сокращением для:

elem/child::*

, которое выбирает все дочерние элементы из elem.Почему только элементы?Потому что:

Проверка узла * верна для любого узла типа основного узла.

и:

Если ось можетсодержат элементы, тогда основным типом узла является элемент;

https://www.w3.org/TR/1999/REC-xpath-19991116/#node-tests


Атрибуты доступны только по оси attribute, но не по дочерней оси:

Каждый узел элемента имеет связанный набор узлов атрибута;элемент является родителем каждого из этих узлов атрибута;однако узел атрибута не является дочерним по отношению к его родительскому элементу .
(выделение добавлено)

https://www.w3.org/TR/1999/REC-xpath-19991116/#attribute-nodes


На оси атрибутов основным типом узла является атрибут, поэтому:

elem/attribute::*

(который может быть сокращен до elem/@*) выбирает все атрибуты elem.

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