Основываясь на ваших комментариях к Dimitre, я думаю, что вам нужно будет использовать функцию document()
для доступа к XML-файлу «основного списка».
Что вы на самом деле запускаете таблицу стилей, это отдельные фрагменты (dano.xml, mike.xml, steve.xml), правильно?
Я использую пример «mike.xml» для примера. Я не знаю, как выглядят фрагменты, поэтому я должен был сделать это. Вы должны будете иметь возможность идентифицировать правильный <company>
в главном списке на основе чего-то во фрагменте. В моем примере фрагмент имеет элемент <compName>
с тем же значением, что и элемент <name>
в соответствующей компании в основном XML-списке.
Вот что "главный список" XML, "Дано/микрофон/стив" XML, таблицы стилей, и результирующий HTML выглядит следующим образом:
master_list.xml:
<?xml version="1.0" encoding="UTF-8"?>
<portfolio>
<company>
<name>Dano Industries</name>
<link>dano.xml</link>
</company>
<company>
<name>Mike and Co.</name>
<link>mike.xml</link>
</company>
<company>
<name>Steve Inc.</name>
<link>steve.xml</link>
</company>
</portfolio>
dano.xml
<?xml version="1.0" encoding="UTF-8"?>
<fragment>
<compName>Dano Industries</compName>
<compInfo>Some info about Dano Industries</compInfo>
</fragment>
mike.xml:
<?xml version="1.0" encoding="UTF-8"?>
<fragment>
<compName>Mike and Co.</compName>
<compInfo>Some info about Mike and Co.</compInfo>
</fragment>
steve.XML
<?xml version="1.0" encoding="UTF-8"?>
<fragment>
<compName>Steve Inc.</compName>
<compInfo>Some info about Steve Inc.</compInfo>
</fragment>
таблица стилей:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="fragment">
<xsl:variable name="name" select="compName"/>
<xsl:variable name="previous-file">
<xsl:value-of select="document('master_list.xml')/portfolio/company[name=$name]/preceding-sibling::company[1]/link"/>
</xsl:variable>
<xsl:variable name="next-file">
<xsl:value-of select="document('master_list.xml')/portfolio/company[name=$name]/following-sibling::company[1]/link"/>
</xsl:variable>
<html>
<xsl:apply-templates/>
<p>
<xsl:if test="not($previous-file='')">
<a href="{$previous-file}">Back</a>
</xsl:if>
<xsl:if test="not($previous-file='') and not($next-file='')">
<xsl:text> | </xsl:text>
</xsl:if>
<xsl:if test="not($next-file='')">
<a href="{$next-file}">Next</a>
</xsl:if>
</p>
</html>
</xsl:template>
<xsl:template match="compName">
<h1><xsl:apply-templates/></h1>
</xsl:template>
<xsl:template match="compInfo">
<p><xsl:apply-templates/></p>
</xsl:template>
</xsl:stylesheet>
HTML для Дано (dano.htm :)
<html>
<h1>Dano Industries</h1>
<p>Some info about Dano Industries</p>
<p><a href="mike.xml">Next</a></p>
</html>
HTML для Mike (mike.htm :)
<html>
<h1>Mike and Co.</h1>
<p>Some info about Mike and Co.</p>
<p><a href="dano.xml">Back</a> | <a href="steve.xml">Next</a></p>
</html>
HTML для Стива (steve.htm :)
<html>
<h1>Steve Inc.</h1>
<p>Some info about Steve Inc.</p>
<p><a href="mike.xml">Back</a></p>
</html>
Хороший вопрос (+1). См. Мой ответ для полного решения. :) –