В своем XSLT-преобразовании я загружаю другой документ с помощью функции document(). Когда я динамически запрашиваю этот документ с помощью функции EXSLT dyn:evaluate(), она работает только с тегами без пространств имен.
Загруженный XML-документ выглядит следующим образом:
<?xml version="1.0"?>
<root xmlns:ctm="http://www.michielmeulendijk.nl/custom">
<nativeNamespace>1</nativeNamespace>
<ctm:externalNamespace>2</ctm:customNamespace1>
</root>
В преобразовании XSLT я загружаю его следующим образом:
<xsl:variable name="xml-doc">
<xsl:copy-of select="document('complex-sample.xml')/*"/>
</xsl:variable>
Затем я запрашиваю его с расширениями EXSLT:
<xsl:message>
<xsl:value-of select="dyn:evaluate('exsl:node-set($xml-doc)//nativeNamespace')"></xsl:value-of>
</xsl:message>
<xsl:message>
<xsl:value-of select="dyn:evaluate('exsl:node-set($xml-doc)//ctm:externalNamespace')"></xsl:value-of>
</xsl:message>
Примечательно, что результат первого запроса предоставляется правильно («1»), но результат второго запроса пуст.
externalNamespace
. - person michael.hor257k   schedule 22.07.2017<ctm:externalNamespace>
и</ctm:customNamespace1>
и удостоверюсь, что в таблице стилей есть объявление пространства имен, связывающее префиксctm
с тем же URI пространства имен, что и в исходном XML, я получаю2
в результате второго вызова. Это использование libxslt. - person michael.hor257k   schedule 22.07.2017