#xml
#xml
Вопрос:
У меня есть 3 XML-файла:
main.xml:
<page>
<title>main page</title>
<elements></elements>
<templates></templates>
</page>
elements.xml:
<elements>
<element_1>element 1</element_1>
<element_2>element 2</element_2>
</elements>
templates.xml:
<templates>
<template_1>template 1</template_1>
<template_2>template 2</template_2>
</templates>
Возможно ли загрузить main.xml и увидеть все <elements>
из elements.xml внутри <elements></elements>
узла main.xml и все <templates>
из templates.xml внутри <templates></templates>
узла main.xml ?
Итак, в конце, main.xml выводился бы следующим образом:
<page>
<title>main page</title>
<elements>
<element_1>element 1</element_1>
<element_2>element 2</element_2>
</elements>
<templates>
<template_1>template 1</template_1>
<template_2>template 2</template_2>
</templates>
</page>
Должен ли я использовать файл xsl? Не могли бы вы, пожалуйста, привести мне пример того, как это будет работать?
Мне нравится избегать использования языка на стороне сервера, но если это строго необходимо, я буду использовать PHP.
Ответ №1:
Если у вас есть контроль над основным файлом, вы могли бы просто использовать XInclude, а затем использовать анализаторы и процессоры, которые знают о XInclude.
В противном случае XSLT может включать вторичные исходные документы с использованием функции document(). Следующая таблица стилей должна выполнять то, что вы ищете:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="elements">
<xsl:copy-of select="document('elements.xml')"/>
</xsl:template>
<xsl:template match="templates">
<xsl:copy-of select="document('templates.xml')"/>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Комментарии:
1. Спасибо, Роберт. Я пошел с
document()
, и это работает как шарм. Еще раз спасибо.