powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Обработка ОДНОГО XML c выводом в несколько файлов
4 сообщений из 4, страница 1 из 1
Обработка ОДНОГО XML c выводом в несколько файлов
    #40114455
andrei77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, друзья прошу вашего совета.

Есть достаточно простой xml вроде:
Код: xml
1.
2.
3.
4.
5.
6.
<root>
<object id="1" name="aa"/>
<object id="2" name="av"/>
<object id="3" name="as"/>
<object id="4" name="sa"/>
</root>



Необходимо с помощью xslt вывести каждый object в отдельный html.
Как написать сам стиль для меня понятно. Но не очень понятно, как потому все это запустить.
Обычно я пользуюсь msxsl, создаю bat и он все что нужно делает, вроде:
run.batcall msxsl.exe my.xml transform.xsl -xe -o result.xml

Это для случая одного выходного файла.
А если неизвестно сколько у меня этих object, а для каждого нужно сделать свой html.
Могу ли я батнике это прописать как-то? Или нужно что-то дополнительно использовать. Может кто-то рекмоендует вообще как такое реализовать проще?
...
Рейтинг: 0 / 0
Обработка ОДНОГО XML c выводом в несколько файлов
    #40114486
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XSLT занимается собственно трансформацией входного XML, и в общем случае он ни про какие файлы понятия не имеет. То, что msxsl.exe может выводить в файл - это частный случай, и достаточно узкий.
Берёте любой язык, на каком умеете писать, разбираете входной xml по нужным нодам, каждую ноду скармливаете XSLT-процессору, выходное дерево от каждого вызова записываете в нужный файл.
Например:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
public class Program
{
  static void Main()
  {
    var xd = new XmlDocument();
    xd.LoadXml(@"
      <root>
      <object id='1' name='aa'/>
      <object id='2' name='av'/>
      <object id='3' name='as'/>
      <object id='4' name='sa'/>
      </root>
    ");
    var transform = new XslCompiledTransform();
    using (var sr = new StringReader(Properties.Resources.MyTransform))
    using (var xr = XmlReader.Create(sr))
      transform.Load(xr);
    var i = 0;
    foreach(var element in xd.SelectNodes("/root/object").Cast<XmlElement>())
    {
      using (var fs = new FileStream(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{++i}.htm"), FileMode.Create))
      using (var xw = XmlWriter.Create(fs, new XmlWriterSettings
      {
        Indent = true,
        IndentChars = "\t",
        OmitXmlDeclaration = true
      }))
        transform.Transform(element, xw);
    }
  }
}


где Properties.Resources.MyTransform - это
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" />
  <xsl:template match="object">
    <html>
    <body>
      <p>
        <xsl:value-of select="concat('id=', @id)" />
      </p>
      <p>
        <xsl:value-of select="concat('name=', @name)" />
      </p>
    </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
Обработка ОДНОГО XML c выводом в несколько файлов
    #40114526
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариант задать в XSL входной параметр, который будет определять какой узел разбирать, а потом несколько раз запустить преобразование с разными параметрами
...
Рейтинг: 0 / 0
Обработка ОДНОГО XML c выводом в несколько файлов
    #40114556
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот этой штукой пользовался: http://exslt.org/
Не помню уже где подсмотрел. У докбука наверное.
Вроде много кто это поддерживает. Я из xsltproc использовал.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Обработка ОДНОГО XML c выводом в несколько файлов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]