Как объединить несколько файлов XML в один файл XML с помощью xslt? - PullRequest
1 голос
/ 07 мая 2011

Мне нужно объединить пару файлов XML в один, используя XSLT. У меня есть 4 выпуска XML-файлов, прием, театр1 и театр2. Сначала необходимо добавить релиз, затем соответствующий прием должен быть размещен внутри релизной части. Затем следует добавить два других.

вот формат файлов. релиз: текст

прием: текст

результат должен быть: < текст текст

Вот то, что у меня есть, но оно работает не полностью

Остальные 2 файла просто необходимо добавить в конце

Ответы [ 2 ]

3 голосов
/ 07 мая 2011

Вот как это сделать:

$ expand -t2 release.xml
<release name="bla"/>

$ expand -t2 reception.xml
<receptions>
  <reception name="bla">
    <blabla/>
  </reception>
  <reception name="blub">
    <blubbel/>
  </reception>
</receptions>

$ expand -t2 theatre1.xml
<theatre number="1"/>

$ expand -t2 theatre2.xml
<theatre number="2"/>

$ expand -t2 release.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:strip-space elements="*"/><!-- make output look nice -->
  <xsl:output indent="yes"/>

  <xsl:template match="release">
    <xsl:variable name="rel-name" select="@name"/>
    <xsl:copy>
      <xsl:copy-of select="node()"/><!-- copy remainder of doc -->
      <xsl:copy-of select="document( 'release.xml' )"/>
      <xsl:variable name="rcpt-doc" select="document( 'reception.xml' )"/>
      <xsl:copy-of select="$rcpt-doc/*/reception[ @name = $rel-name ]"/>
      <xsl:copy-of select="document( 'theatre1.xml' )"/>
      <xsl:copy-of select="document( 'theatre2.xml' )"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

Назовите это так:

 xsltproc release.xsl release.xml

Это результат:

<?xml version="1.0"?>
<release>
  <release name="bla"/>
  <reception name="bla">
    <blabla/>
  </reception>
  <theatre number="1"/>
  <theatre number="2"/>
</release>
2 голосов
/ 07 мая 2011

Чтение нескольких входных документов , кажется, отвечает на этот вопрос.

Когда вы запускаете процессор XSLT, вы указываете ему, где найти документ дерева исходных текстов - возможно, в файле на диске на локальном или удаленном компьютере - и таблицу стилей, к которой он применяется. Вы не можете сказать процессору применять таблицу стилей одновременно к нескольким входным документам. Функция document (), однако, позволяет таблице стилей называть дополнительный документ для чтения. Вы можете вставить весь документ в дерево результатов или вставить его часть на основе условия, описанного выражением XPath. Вы даже можете использовать эту функцию с инструкциями xsl: key и key () для поиска значения ключа в документе за пределами исходного документа.

Следовательно, ключ для загрузки нескольких документов в xslt использует функцию document ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...