Было бы неплохо, если бы вы могли каким-то образом определить, с какими параметрами xsl:result-document
был записан каждый документ на вторичном выходе.Вы сможете скопировать их для вашего p:store
.Но вы можете извлечь другие вещи из каждого документа.Вы можете получить имя документа, используя base-uri()
, и вы можете просмотреть, например, корневой элемент.Вы можете поместить эти значения в переменную, используя:
<p:variable name="path" select="base-uri(/*)"/>
<p:variable name="root" select="local-name(/*)"/>
(Поместите их чуть ниже p:iteration-source
.)
Затем вам нужно решить, как вызвать p:store
.Вы можете использовать XPath, если, при условии, что ваш анализатор XProc поддерживает XPath 2.0 (как XMLCalabash).Но я бы порекомендовал использовать p:choose
следующим образом:
<p:choose>
<p:when test="ends-with($path, '.xhtml')">
<p:store
doctype-public="-//W3C//DTD XHTML 1.0 Frameset//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"
encoding="UTF-8"
media-type="text/html"
method="xhtml"
omit-xml-declaration="no">
<p:with-option name="href" select="$path"/>
</p:store>
</p:when>
<p:otherwise>
<p:store
encoding="UTF-8"
media-type="application/xml"
method="xml"
omit-xml-declaration="no">
<p:with-option name="href" select="$path"/>
</p:store>
</p:otherwise>
</p:choose>
(Весь этот p:choose
заменяет p:store
, который у вас уже есть.)
Тест в p:when
только смотрит на $path
, но вы также можете включить тест для $root
, если хотите.
Также требуется, чтобы вы использовали .xhtml
в качестве расширения в ваших xsl:result-document
выражениях для вывода HTML, но вы можете легко настроить его, если хотите.
var
и choose
должно быть достаточно для правильной записи XML, по крайней мере.
Удачи!