Я хочу использовать переменную как часть выражения XPath.
Моя проблема может быть связана с функцией установки узла msxsl ... не уверен. Но не позволяйте этому рассуждать вашим суждениям ... читайте дальше ...
Я использую функцию .NET для загрузки файла контента, который передается через сделанный на заказ контент XML. @file
приводит к XML-файлу.
Сделанный на заказ XML-код на странице выглядит следующим образом:
<control name="import" file="information.xml" node="r:container/r:group[@id='set01']/r:item[1]" />
XSL выглядит так:
<xsl:variable name="document">
<xsl:copy-of select="ext:getIncludedContent(@file)" />
</xsl:variable>
Затем я перевожу это в набор узлов, чтобы я мог запросить документ
<xsl:variable name="preset-xml" select="msxsl:node-set($document)" />
Исходный файл, в который я загружаю, выглядит следующим образом:
<container>
<group id="set01">
<item>value01</item>
<item>value02</item>
<item>value03</item>
</group>
<group id="set02">
<item>value04</item>
<item>value05</item>
</group>
</container>
Это работает до этого момента. Я вижу исходный файл, который выводится и выводится в виде XML.
Моя проблема возникает, когда я пытаюсь запросить исходный файл с выражением XPath, полученным из содержимого.
Я пробовал:
<xsl:value-of select="$preset-xml/@node" />
Очевидно, что это не работает, так как выглядит @node как прямой потомок загруженного в XML.
Я пробовал:
<xsl:variable name="node" select="@node" />
<xsl:value-of select="$preset-xml/$node" />
Но ему не нравится вторая переменная.
Я пробовал concat ($ preset-xml, '/', $ node), но в результате он все равно вытягивает весь документ.
Единственный способ, с помощью которого я могу сделать это сейчас, - выписать полное выражение в шаблоне:
<xsl:value-of select="$preset-xml/r:container/r:group[@id='set01']/r:item[1]" />
Что правильно приносит через value01
Но тогда это жестко закодированное решение.
Я хочу разработать решение, которым можно манипулировать из контента, чтобы удовлетворить любой импортируемый контент, с параметрами, объявленными в файле контента.
p.s. Я использую XSLT 1.0, потому что технический администратор не будет изменять парсер Microsoft для поддержки более поздних версий XSL, поэтому любое решение должно быть написано с учетом этого.