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 работает без глюков и очень быстро. |
© Vasil I. Yaroshevich, 2001-2005 Driven by DokuWiki © 2004-2005 Andreas Gohr |