Включение файла XML в файл XML/XSL
Итак, в настоящее время я выполняю работу XML- > XSLT- > (HTML5/CSS3). Прямо сейчас у меня есть файл menu.xml, и я хотел бы включить его в XSL файл или XML-страницу. Я много раз искал, но я не могу найти прямой ответ.
Итак, как включить XML файл в другой файл XML или в файл XSL?
Edit: By include, я имею в виду ссылку/загрузку из другого файла, а не копирование, вставку или просто его вложение.
Ответы
Ответ 1
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>
Помните. Любой XML может быть встроен в таблицу стилей 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()
strong >
Как правило, определяется глобальная переменная, значение которой является результатом вызова функции document()
. Затем эту переменную и ее содержимое можно получить через выражения XPath во время преобразования.
Ответ 2
Итак, как включить XML файл в другой файл XML или в файл XSL?
Вы можете использовать внешний объект для ссылки на файл menu.xml и включить контент в файл XML или XSLT (или оба).
Включая, я имею в виду ссылку/загрузку это из другого файла, а не копии и вставляя его или просто вставляя его.
Используя внешние объекты, вы можете ссылаться/загружать содержимое menu.xml из внешних файлов и не дублировать содержимое XML.
Например, если вы хотите, чтобы содержимое menu.xml, включенное в ваш XSLT, вы объявляли бы внешний объект в своем XSLT следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stylesheet [
<!ENTITY menu SYSTEM "./menu.xml">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
и затем может ссылаться на него, как на любой другой объект:
&menu;
Когда синтаксический анализ XSLT будет расширен, ссылка на объект будет расширена, и содержимое XML в menu.xml будет включено как часть документа XSLT, как если бы вы копировали/вставляли в то место, где была ссылка на объект.
Ответ 3
У меня сообщение в блоге об этом. Вы используете document(), чтобы получить другой XML и передать содержимое с помощью параметров.
Ответ 4
Мне не удалось заставить код работать, который предоставили люди. Однако я получил решение после нескольких попыток. Назовите xml файл clGroup.xml(первые две буквы не имеют значения, но я нахожу "Group". Этот xml файл будет ссылаться на xml, который вы хотите проанализировать.
clGroup xml:
<?xml version='1.0' encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="calendarGroup.xslt" ?>
<groups>
<groupRef>caGroup.xml</groupRef>
</groups>
Теперь назовите файл caGroup.xml и введите следующий код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<topics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<topic>
<topicstopic>Calendar</topicstopic>
<topicsubmitter>Calendar</topicsubmitter>
<creatoremail>[email protected]</creatoremail>
</topic>
<topic>
<name>Week1</name>
<sunday/>
<monday/>
<tuesday>Test01 Young Men Weekly</tuesday>
<wednesday>02 Elders Home Teaching Message Birthday</wednesday>
<thursday>03 </thursday>
<friday>04 </friday>
<saturday>05 #Young Men Weekly</saturday>
</topic>
<topic>
<name>Week2</name>
<sunday>06 Fast Sunday</sunday>
<monday>07 FHE</monday>
<tuesday>08 Young Men Tonight #Young Men Weekly going to Bishops storehouse 6PM to 7PM Young Men Weekly</tuesday>
<wednesday>09 </wednesday>
<thursday>10 Scout Round Table at 7 PM </thursday>
<friday>11 </friday>
<saturday>12 </saturday>
</topic>
</topics>
Теперь вот мой XSLT файл calendarGroup.xslt
<?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"
version="1.0"
encoding="UTF-8"
indent="yes"/>
<xsl:template match="groups/groupRef">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Table</title>
<meta charset="utf-8" />
</head>
<body>
<table border="1">
<tr>
<th>Sunday</th>
<th>Monday</th>
<th>Tuesday</th>
<th>Wednesday</th>
<th>Thursday</th>
<th>Friday</th>
<th>Saturday</th>
</tr>
<xsl:for-each select="document(.)//topic">
<xsl:if test="string(name) != ''">
<tr>
<td>
<xsl:value-of select="sunday"/>
</td>
<td>
<xsl:value-of select="monday"/>
</td>
<td>
<xsl:value-of select="tuesday"/>
</td>
<td>
<xsl:value-of select="wednesday"/>
</td>
<td>
<xsl:value-of select="thursday"/>
</td>
<td>
<xsl:value-of select="friday"/>
</td>
<td>
<xsl:value-of select="saturday"/>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Преимущество настройки моего кода таким образом заключается в том, что я могу легко создать xml из файла excel, а не половину, чтобы вставить выражение во вновь созданный файл. Для этого вам нужно иметь формат "xxGroup", чтобы он работал вместе. Вы можете добавить больше групп в файл clGroup, и они будут анализировать в XSLT, позволяя вам добавить больше xml в тот же синтаксический анализатор XSLT. Убедитесь, что все они находятся в одном каталоге.
Ответ 5
Если просто встраивание файла внутри XML файла не является решением, добавление поля url, которое читает программа интерпретации, должно быть добавлено - вы в основном запрашиваете эквивалент include (menu.xml) или require (xml), но в файле XML.
Итак, так как вы пишете программу, которая intepretting файла, вы можете добавить тег <externalMenuTagThatYouDecideToAddToTheBaseXmlFile>
или все, что вы хотите назвать, которое вы прочтете, и вставьте корень menu.xml, обратите внимание на место <externalMenuTagThatYouDecideToAddToTheBaseXmlFile>
.
Удачи, и ваши программы всегда скомпилируются.