2012-02-13 3 views
1

Посмотрите этот шаблон XSL:Что/.. XPath делает в шаблоне XSL

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

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

В части «выберите =»/..»не сгенерирует исключение (для меня, право является XPath ../), но ничего не делает.

Почему определить параметр, как это?

Если я выполнить шаблон без передать параметр «бла», «га» будет пустым, в противном случае она будет содержать значение

Thanks

ответ

4

Часть "выберите ="/..»не сгенерирует исключение (для меня, право XPath является ../), но ничего не делает.

Почему определить параметр, как это?

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

Затем процессор XSLT не будет выдавать ошибку на выражение как:

$bla | $myNodeSet 

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

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

Easy VERIF ication:

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

<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> 
+0

А, хороший ответ. –

+0

Действительно хороший ответ. Спасибо Димитрию! –

+0

@GiulianiSanches: Добро пожаловать. –

0

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

1

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

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

Выход:

<ha>0</ha> 
+0

lwburk: на самом деле, это очень полезная вещь в в некоторых случаях - см. мой ответ. –

Смежные вопросы