Я использую asciidoc с серверной частью docbook и пытаюсь передать URL-адрес в качестве переменной из asciidoc в docbook, где переменная может иметь разные значения в документе. Например, я хочу, чтобы мои пользователи могли делать что-то вроде:
# url="http://foo/
== some text
Some para....
# url="http://bar/
== some text
Some para....
Моя идея заключалась в том, чтобы использовать сквозные блоки для добавления инструкций по обработке, которые можно было бы найти в docbook, например:
pass::[<?my_url http://foo ?>]
== some title
some para...
Чего я не могу понять, как это сделать, так это написать XSLT, который выражает следующее: «найти предыдущую инструкцию обработки с именем my_url
и использовать ее содержимое для установки значения переменной».
Следуя указаниям, приведенным в http://www.sagehill.net/docbookxsl/ProcessingInstructions.html Я пытался использовать dbhtml
PI, например:
<?dbhtml my_url="http://foo.com" ?>
и в моем XSL:
<xsl:template match="ulink[@role='edit_me']">
<xsl:variable name="my_url">
<xsl:call-template name="dbhtml-attribute">
<xsl:with-param name="pis"
select="ancestor-or-self::entry/processing-instruction('dbhtml')"/>
<xsl:with-param name="attribute" select="'my_url'"/>
</xsl:call-template>
</xsl:variable>
GOT: <xsl:value-of select="$my_url" />
</xsl:template>
Но я совершенно не могу получить значение, которое мне нужно. Помощь с благодарностью.
Добавлен пример XML
Например, возьмем этот пример XML-документа:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<book lang="en">
<bookinfo>
<title>Title one</title>
</bookinfo>
<?my_url http://foo.com ?>
<preface>
<title><ulink role="edit_me" url="test.asciidoc">Edit me</ulink></title>
</preface>
<?my_url http://bar.com ?>
<chapter id="_title_two">
<title>Title two<ulink role="edit_me" url="test.asciidoc">Edit me</ulink></title>
<simpara>Some text</simpara>
</chapter>
<chapter id="_title_three">
<title>Title three<ulink role="edit_me" url="test.asciidoc">Edit me</ulink></title>
<simpara>More text</simpara>
</chapter>
</book>
Я хочу отображать каждую из ссылок edit_me
, используя URL-адрес, указанный в предыдущей инструкции обработки my_url
. Таким образом, первая ссылка будет использовать foo.com
, а следующие две — bar.com
.