I. Вот как любой документ XML или фрагмент может быть встроен в таблицу стилей XSLT и используется в процессе преобразования:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<my:menu>
<menu>
<choice>A</choice>
<choice>B</choice>
<choice>C</choice>
</menu>
</my:menu>
<xsl:template match="/">
<xsl:copy-of select="document('')/*/my:menu/*"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется на любой документ XML (не используется в этот пример), разыскиваемый результат (просто копирование XML) производится:
<menu xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my:my">
<choice>A</choice>
<choice>B</choice>
<choice>C</choice>
</menu>
Запомнить: Любой XM L может быть встроен в таблицу стилей XSLT, если она завернута в элемент с пространством имен (пространство имен, а не пространство имен XSLT), и этот элемент переноса находится на глобальном уровне (дочерний элемент <xsl:stylesheet>
(верхний)).
II. Доступ к меню Файл XML, который находится в отдельном XML-файле:
Чтобы сделать это, мы должны изменить только немного предыдущий пример:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="document('menu.XML')/*"/>
</xsl:template>
</xsl:stylesheet>
Если файл меню XML находится в файле 'menu.XML'
(в том же каталоге, что и файл таблицы стилей XSLT, то это преобразование дает точно такой же результат как предыдущий:
<menu>
<choice>A</choice>
<choice>B</choice>
<choice>C</choice>
</menu>
ли нет т.е: В обоих случаях мы используем стандартную функцию XSLT document()
Как правило, один определяет переменную на глобальном уровне, значение которого является результатом вызова функции document()
. Затем эту переменную и ее содержимое можно получить через выражения XPath во время преобразования.
Под «включать» это означает, что вы хотите скопировать/вставить содержимое menu.xml в другой файл и разместить его там без проблем, или вы имеете в виду, что хотите каким-то образом дистанционно ссылаться на меню. xml из файла хоста, или вы хотите, чтобы ваш веб-сервер копировал содержимое menu.xml в файл хоста перед его обслуживанием, как если бы вы сами скопировали или вставляли содержимое? – Phrogz
Ах, я вроде как хотел ссылаться на него из файла, не включая его. Черт, мои разговоры говорят. Я слишком привык к C. – Jookia
Хороший вопрос, +1. См. Мой ответ для объяснения и два полных примера кода, которые отвечают на ваши вопросы. :) –