xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

Чем реструктурировать XML?


Автор Сообщение
Kindoro
Новичок

Зарегистрирован: 04.12.2006
Сообщения: 1

[10739] Пн Дек 04, 2006 15:16
Чем реструктурировать XML?
Господа, в руки попал какталог ПО в XML, в котором все теги на первом уровне.
То есть выглядит это так:

<Section>Видео</Section>
<Name>Adobe Premiere</Name>
<Text>Программа для работы с видео</Text>
<H1>основные Возможности</H1>
.......
<Name>VirtualDub</Name>
.......

ну и так далее.
Надо на выходе получить структурированный XML
Типа

<Section>Видео
<Name>Adobe Premiere
<Text>Программа для работы с видео</Text>
<H1>основные Возможности</H1>
</Name>
</Section>

и так далее.
Чем можно это сделать?
Гость





[10744] Вт Дек 05, 2006 01:26

Мда, судя по статистике этого форума можно утверждать, что желающих ЗНАТЬ КАК много, а вот ЗНАЮЩИХ практически нет Smile
Чтож, можно толкьо пожелать успехов нам.
Sergiy
Аспирант

Зарегистрирован: 19.02.2005
Сообщения: 225
Откуда: Киев
Посетить сайт автора
[10756] Ср Дек 06, 2006 01:50

Можно проделать всё на Perl

Код:


s/<Section>\s+<Name>/<Section><Name>/g;
s/<\/Name>//g;
s/<Name>/<\/Name><Name>/g;
s/<Section>/<\/Name><Section>/g;
s/<Section>\s*<\/Name>/<Section>/g;
s/<Name><\/Name>//g;
s/<\/Section>//g;
s/<Section>/<\/Section><Section>/g;
#А дальше убираем лишние теги в начале и конце корневого элемента


Хотел предложить использовать sed, но потом вспомнил что у него ограничены возможности
_________________
развлекайся и ни в чём себе не отказывай...
drews
Новичок

Зарегистрирован: 25.01.2007
Сообщения: 4

[11192] Вт Мар 20, 2007 09:48

смотришь на дату сообщения.. и отвечать уже смысла нет
SuSanin
Аспирант

Зарегистрирован: 26.02.2007
Сообщения: 167
Откуда: Ижевск
[11193] Вт Мар 20, 2007 10:16

Ну почему нет смысла? может кто другой зайдет посмотреть, хоть ему поможем Smile
Лично я структурирую с помощью oXygen'а . Неплохой редактор... нормально(как настроишь) структурирует код, открывающий и закрывающий теги на одном уровне. вложенные со сдвигом относительно родительских.
Нажал одну кнопку и ..вуа-ля
Vasilisk
Наставник

Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
[11504] Сб Июн 09, 2007 15:09

Если каждый новый тег с новой строки, то средствами MSXML делается так

Код:

IXMLDOMDocument.load(AXMLName);
IXMLDOMDocument.save(AXMLName);


Все. Если же теги в одну строку, то нужно их предварительно разбить на несколько строк.

Сам я пользуюсь собственной утилиткой на JavaScript

Код:

// xmlWrap.js
// Crack cmdline args
if (WScript.Arguments.length < 1)
{
   WScript.echo("XML Wrap Utility\n");
   WScript.echo("usage: xmlWrap inputFile");
   WScript.Quit(1);
}

try
{
   // attach the schema cache to a DOM
   var xmlSource = new ActiveXObject("MSXML2.DOMDocument.6.0");  // Здесь используется MSXML6 если установлена версия младше, то нужно указать соответствующий ProgID
   var fso = new ActiveXObject("Scripting.FileSystemObject");
   tf = fso.OpenTextFile(WScript.Arguments.Item(0), 1);
   s = tf.ReadAll();
   tf.Close();
   s = s.replace(/(\>\<)/g, ">\n<");

   // load XML document
   xmlSource.async = false;
   xmlSource.validateOnParse = false;

   if (xmlSource.loadXML(s))
   {
      xmlSource.save(WScript.Arguments.Item(0));
      WScript.echo("success");
   }
   else
   {
      WScript.echo("Instance error" );
      WScript.echo("### error: " + xmlSource.parseError.reason);
      WScript.echo("### source: " + xmlSource.parseError.srcText);
      WScript.echo("### line: " + xmlSource.parseError.line);
   }
}
catch ( e )
{
   WScript.echo ( "Exception loading instance document" );
   WScript.echo ( e.description );
}


_________________
С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]