Что делает / .. xpath в шаблоне xsl - PullRequest
1 голос
/ 14 февраля 2012

Посмотрите этот шаблон xsl:

<xsl:template match="root">
    <xsl:param name="bla" select="/.." />

    <ha>
        <xsl:value-of select="$bla" />
    </ha>
</xsl:template>

Часть "select =" / .. "не выдает исключение (для меня правильный xpath - ../), но ничего не делает.

Зачем определять такой параметр?

Если я выполню шаблон без передачи параметра "bla", "ha" будет пустым, в противном случае он будет содержать переданное значение.

Спасибо

Ответы [ 3 ]

4 голосов
/ 14 февраля 2012

Часть "select =" / .. "не выдает исключение (для меня правильный xpath - это ../), но ничего не делает.

Зачем определять такой параметр какчто?

Это полезно в XSLT 1.0 , чтобы указать, что тип xsl:param или xsl:variable задан для узла.

ТогдаXSLT-процессор не выдаст ошибку в выражении, например:

$bla | $myNodeSet

Напротив, если вы просто определяете параметр, не задавая ему никакого значения по умолчанию, приведенное выше выражение выдает ошибку - что-то вроде:

" Выражение должно соответствовать набору узлов "

Простая проверка :

Попробуйте это (работает нормально):

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

 <xsl:template match="/">
 <xsl:param name="blah" select="/.."/>

 <xsl:copy-of select=". | $blah"/>
</xsl:template>
</xsl:stylesheet>

и это (приводит к ошибке):

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

 <xsl:template match="/">
 <xsl:param name="blah"/>

 <xsl:copy-of select=". | $blah"/>
</xsl:template>
</xsl:stylesheet>
1 голос
/ 14 февраля 2012

Это действительно довольно бесполезная вещь, чтобы попробовать. Вы выбираете родителя корневого узла, который по определению не имеет родительского узла. Используйте следующее, чтобы показать, что ничего не выбрано:

<xsl:value-of select="count($bla)"/>

Выход:

<ha>0</ha>
0 голосов
/ 14 февраля 2012

Это может быть ошибка в запросе, и xslt игнорирует недопустимые части запросов.

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