Динамическое построение строки запроса XPath - PullRequest
0 голосов
/ 14 мая 2011

У меня есть цепной сценарий преобразования XSLT 2.0 (с использованием saxon), например:- I1.xml является вводом для T1.xslt, таблицы стилей для построения T2.xslt- I2.xml является вводом для T2.xslt, таблицы стилей, которая будет выводить O1.xml

Я хотел бы иметь функцию xsl: (чтобы она была доступна в выражениях XPath), назовем ее my: f (dataNode, queryString), которая будет запрашивать dataNode с использованием предоставленного запроса, аналогичнониже:

<xsl:function name="my:f">
       <xsl:param name="dataNode" as="item()*"/>
       <xsl:param name="query" as="xsd:string"/>
             <xsl:sequence select="$dataNode/$query"/>
</xsl:function>

my: f () хранится в отдельном файле и включается только в T2.my: f () изолирован в файле, потому что в зависимости от конфигурации он может вызвать функцию расширения для выполнения запроса.Вызов my: f () - это, конечно, «сборка» в T1 (где XPath queryString динамически объединяется), но на самом деле он вызывается только в T2.

Единственная проблема, которая у меня, похоже, возникает.Это способ передачи динамически созданной строки запроса из T1 в T2, а затем в my: f () в виде простой строки (поскольку фактический запрос будет выполняться my: f ()).

У кого-нибудь есть идеи (и в идеале некоторый код) о том, как к этому подойти?

С уважением

1 Ответ

1 голос
/ 14 мая 2011

Хорошо, если вы хотите создавать и оценивать выражения XPath во время выполнения, вам нужно использовать функцию расширения, такую ​​как http://www.saxonica.com/documentation/extensions/functions/evaluate.xml: <xsl:sequence select="saxon:evaluate(concat('$p1/', $query), $dataNode)"/>

...