Я на самом деле не пишу переводчик, я пишу веб-сайт. > _>

то в настоящее время я делаю некоторые XML-> XSLT-> (HTML5 / CSS3) работы. Прямо сейчас у меня есть файл menu.xml, и я хотел бы включить его либо в файл XSL, либо на страницу XML. Я много искал, но не могу найти простой ответ.

Итак, как мне включить XML-файл в другой XML-файл или в XSL-файл?

Редактировать: Под включением я подразумеваю ссылку / загрузку его из другого файла, а не копирование и вставку или просто встраивание.

 Jookia16 янв. 2011 г., 03:08
Ах, я как бы имел ввиду это как ссылку на файл, не включая его. Черт, мои программы говорят. Я слишком польза от C.
 Dimitre Novatchev16 янв. 2011 г., 04:22
Хороший вопрос, +1. Смотрите мой ответ для объяснения и два полных примера кода, которые отвечают на ваши вопросы. :)
 Phrogz16 янв. 2011 г., 02:56
Под «включением» вы подразумеваете, что хотите скопировать / вставить содержимое menu.xml в другой файл и разместить его там без проблем, или вы хотите иметь какой-то способ удаленной ссылки на menu.xml из файл хоста, или вы имеете в виду, что вы хотите, чтобы ваш веб-сервер копировал содержимое menu.xml в файл хоста перед его обслуживанием, как если бы вы сами копировали / вставляли содержимое?

Ответы на вопрос(5)

Вы можете использоватьвнешняя сущность ссылаться на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, как если бы вы скопировали / вставили в то место, где была ссылка на сущность.

 sandeepkunkunuru22 мая 2017 г., 21:54
упаковка и меню; в локальном объекте позволят использовать все xpath в меню xml внутри xslt. например: <externalmenu> & menu; </ externalmenu>, а затем <xsl: for-each select = "document ('') / * / externalmenu / xpath-in-menu-xml">
 user35781217 янв. 2011 г., 16:31
Это не плохой ответ, но это не«Реферирование / загрузки» но замена в поверхностном синтаксисе реже, чем в логической абстракции.

следует добавить поле URL, которое читает интерпретирующая программа, - в основном вы запрашиваете эквивалент include (menu.xml) или require (xml), но в файле XML.

Так как вы пишете программу, которая интерпретирует файл, вы можете добавить<externalMenuTagThatYouDecideToAddToTheBaseXmlFile> тег или как вы хотите назвать его, который вы прочитаете и вставьте корневой файл menu.xml, отметьте место<externalMenuTagThatYouDecideToAddToTheBaseXmlFile>.

Удачи и пусть ваши программы всегда компилируются.

 Jookia16 янв. 2011 г., 03:33
Я на самом деле не пишу переводчик, я пишу веб-сайт. > _>

сообщение в блоге на этом. Вы используете document (), чтобы получить другой XML и передать содержимое с помощью параметров.

 Josh Habdas26 февр. 2019 г., 06:00
Возможно, вы могли бы показать свою работу здесь, поскольку это относится к заданному вопросу?

который предоставили люди. Однако я получил решение после нескольких попыток. Назовите xml-файл clGroup.xml (первые две буквы не имеют значения, но я считаю, что «Группа» обязательна. Этот 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. Убедитесь, что все они находятся в одном каталоге.

 michael.hor257k04 дек. 2016 г., 22:53
В строке «Группа» нет магии - вы можете использовать любые имена, которые вам нравятся.
 Cody07 дек. 2016 г., 19:58
Спасибо! Это странно, потому что, когда я меняю названия вне формулировок, это почему-то не работает для меня. Хорошо, что я вижу, что вы можете добавить несколько файлов XML в группу, и она будет анализировать их.
Решение Вопроса

I. Вот как любой XML-документ или фрагмент может быть встроен в таблицу стилей XSLT и использован во время преобразования:

<xsl:stylesheet version="1..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..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>

Сделать примечание: В обоих случаях мы используем стандартную функцию XSLTdocument()

Как правило, определяется переменная глобального уровня, значение которой является результатом вызоваdocument() функция. Затем эта переменная и ее содержимое доступны через выражения XPath во время преобразования.

 lysergic-acid26 июн. 2012 г., 13:11
Можно ли применять шаблоны к включенному документу (menu.xml) так же, как к любому другому элементу?
 Dimitre Novatchev26 июн. 2012 г., 14:02
@ lysergic-acid: Да, почему вы думаете, что это невозможно? Просто попробуй<xsl:apply-templates select="document('menu.XML')/*"/> или что угодно, чтобы увидеть, что это работает так, как должно.

Ваш ответ на вопрос