Q. Как вычислить динамическое XPath-выражение, например, выражение, прочитанное из XML-файла?


А [Anton Lapounov]. Средствами стандартного XSLT это сделать нельзя, но можно с помощью расширений языка, таких как saxon:evaluate для Saxon и ms:script для System.Xml:

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ms="urn:schemas-microsoft-com:xslt"
    xmlns:user="http://tempuri.org/user"
>
 
<xsl:output omit-xml-declaration="yes"/>
 
<ms:script language="C#" implements-prefix="user">
    // Выбрать набор узлов по заданным контекстному узлу и XPath-выражению. (C) Anton Lapounov 2005
    public XPathNodeIterator SelectNodes(XPathNodeIterator context, string xpath) {
        if (context.Count != 1) {
            // Ошибка - context должен содержать ровно один узел
            return null;
        }
        context.MoveNext();
        return context.Current.Select(xpath);
    }
</ms:script>
 
<xsl:template match="/">
    <!-- Скопировать все узлы данного стиля, имеющие атрибут select -->
    <xsl:copy-of select="user:SelectNodes(document(''), '//*[@select]')"/>
</xsl:template>
 
</xsl:stylesheet>

А [Nadya]. Существует функция dyn:evaluate расширения EXSLT - Dynamic

Реализация функции для libxslt работает без глюков и очень быстро.

 
  faq/system_xml_dynamic_xpath.txt · Последние изменения: 2012/03/27 05:15
 
Нас поддерживают: Ох. уж этот женский переезд квартиры в Москве. Рейтинг@Mail.ruliveinternet.ru