Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Как обработать несколько файлов xml


Автор: JuRMaN 27.2.2010, 15:10
Добрый день!

Прошу Вас помочь в следующей задаче:

Имеется N-число файлов xml, одинаковой разметки, но с разным информационным наполнением. Необходимо из каждого файла xml "вытянуть" через xsl информацию в тегах, например <Res1></Res1> <Res2></Res2> <Res3></Res3> и эту информацию отобразить в виде таблицы HTML страницы:

         Имя                   Фамилия              Отчество
<Res1></Res1>   <Res2></Res2>   <Res3></Res3>
           ...                          ...                          ...
<Res1></Res1>   <Res2></Res2>   <Res3></Res3>
<Res1></Res1>   <Res2></Res2>   <Res3></Res3>

Спасибо.

Автор: diadiavova 27.2.2010, 15:44
В xslt есть функция document(), позволяющая извлекать данные из документа, находящегося по заданному адресу.

Автор: JuRMaN 28.2.2010, 01:18
diadiavova
Не могли бы привести пример, как эта функция работает с несколькими файлами, например 1.xml, 2.xml, 3.xml?

Автор: diadiavova 28.2.2010, 02:16
Ну вот как вариант
1.xml
Код

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Res1>Иванов</Res1>
  <Res2>Иван</Res2>
  <Res3>Иванович</Res3>
</root>

2.xml
Код

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Res1>Петров</Res1>
  <Res2>Пётр</Res2>
  <Res3>Петрович</Res3>
</root>

3.xml
Код

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Res1>Сидоров</Res1>
  <Res2>Сидор</Res2>
  <Res3>Сидорович</Res3>
</root>

Структура основного документа не важна в моём примере, данные из него в конечном документе не используются(в твоём видимо будет иначе)Я сделал так
Код

<?xml version="1.0" encoding="utf-8"?>
<root/>

Ну и собственно преобразование
Код

<?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" indent="yes"/>

  <xsl:template match="/">
    <html>
      <head>
        <title>multydocument</title>
      </head>
      <body>
        <table border="1" bordercolor="black" cellspacing="0">
          <tbody>
            <tr>
              <th>Фамилия</th>
              <th>Имя</th>
              <th>Отчество</th>
            </tr>
            <xsl:call-template name="extRow">
              <xsl:with-param name="src" select="'1.xml'"/>
            </xsl:call-template>
            <xsl:call-template name="extRow">
              <xsl:with-param name="src" select="'2.xml'"/>
            </xsl:call-template>
            <xsl:call-template name="extRow">
              <xsl:with-param name="src" select="'3.xml'"/>
            </xsl:call-template>
          </tbody>
        </table>
      </body>
    </html>
  </xsl:template>

  <xsl:template name="extRow">
    <xsl:param name="src"/>
    <tr>
      <td>
        <xsl:value-of select="document($src)//Res1"/>
      </td>
      <td>
        <xsl:value-of select="document($src)//Res2"/>
      </td>
      <td>
        <xsl:value-of select="document($src)//Res3"/>
      </td>
    </tr>    
  </xsl:template>
</xsl:stylesheet>

Всё должно лежать в одном каталоге(я использовал относительную адресация)

Автор: JuRMaN 28.2.2010, 11:06
diadiavova
Спасибо за пример. становиться все прозрачно. А как быть если таких файлов больше 300, не описывать же каждый в структуре. Есть ли возможность у xslt сделать так чтобы он мог обработать все находящиеся файлы в одной папке?

Автор: diadiavova 28.2.2010, 12:23
Цитата(JuRMaN @  28.2.2010,  11:06 Найти цитируемый пост)
Есть ли возможность у xslt сделать так чтобы он мог обработать все находящиеся файлы в одной папке?

На сколько я помню, станндартных способов нет(могу ошибаться), но никто не мешает создать дополнительный хмл-файл, в котором будет содержаться список файлов данных и брать сведения из него. Его в принципе и автоматически генерировать можно.

Автор: JuRMaN 28.2.2010, 14:02
diadiavova
Цитата
создать дополнительный хмл-файл, в котором будет содержаться список файлов данных и брать сведения из него. Его в принципе и автоматически генерировать можно. 

Вот это, то что надо. Можете написать пример автоматической генерации такого файла?

Спасибо за Вашу отзывчивость. smile 

Автор: diadiavova 28.2.2010, 14:05
Цитата(JuRMaN @  28.2.2010,  14:02 Найти цитируемый пост)
Можете написать пример автоматической генерации такого файла?

Это зависит от того, на каком языке это всё пишется. Я так понимаю всё это будет на сервере работать, так что всё зависит от того, какой язык там используется, и этот вопрос надо рассматривать в соответствующем разделе форума.

Автор: JuRMaN 28.2.2010, 14:18
Хотелось бы использовать язык xlst, но если это на нём сделать будет невозможно, придется изучать другой.

Автор: diadiavova 28.2.2010, 14:23
Цитата(JuRMaN @  28.2.2010,  14:18 Найти цитируемый пост)
Хотелось бы использовать язык xlst

Этот язык предназначен для преобразования XML-файлов, а такие вещи как работа с файловой системой - не совсем его сфера.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)