(no subject)
Jun. 27th, 2007 09:37 pmПоскольку рабочий день у меня вдруг закончился, а делать больше ничего не хочется, то я еще побрюзжу на тему XML...
В системе (угадайте какой), структура системы при экспорте записывается в виде xml'я. вида
<types>
<type name="aaaa">
.....
</type>
<type name="bbbb">
......
</type>
</types>
Вороде бы хорошо и красиво. Работает, супер. Правда, когда оно писалось, libxml под перлом еще не было (первая версия XML::LibXML август 2001, а load_meta начал писаться в январе 2001) и оно мучительно читается через XML::Parser.
Это фиг бы с ним. Работает и ладно...
Но наступает момент, когда надо сравнить, правильно ли оная структура была загружена. Кажется все просто, загрузить, выгрузить, сравнить результаты...
И тут начинается...
diff'ом результатом не сравнишь, потому что порядок <type name="aaaa"> и <type name="bbbb"> никто не гарантирует, черт его знает, как оно из базы придет.
xmldiff тоже не катит, потому что он на все изменения порядка срабатывает...
XML::Diff, есть такой модуль, оказался наредкость сырой, и падал на пустых тегах <p></p>
Найти каких либо внятных средств которые бы умели нестрого сравнивать, мне так и не удалось...
В результате пришлось писать свою собственную приблуду сравнивающую деревья с определенными свойствами...
Вывод: бардак в общем виде скорее вреден, чем полезен.
Вот.
В системе (угадайте какой), структура системы при экспорте записывается в виде xml'я. вида
<types>
<type name="aaaa">
.....
</type>
<type name="bbbb">
......
</type>
</types>
Вороде бы хорошо и красиво. Работает, супер. Правда, когда оно писалось, libxml под перлом еще не было (первая версия XML::LibXML август 2001, а load_meta начал писаться в январе 2001) и оно мучительно читается через XML::Parser.
Это фиг бы с ним. Работает и ладно...
Но наступает момент, когда надо сравнить, правильно ли оная структура была загружена. Кажется все просто, загрузить, выгрузить, сравнить результаты...
И тут начинается...
diff'ом результатом не сравнишь, потому что порядок <type name="aaaa"> и <type name="bbbb"> никто не гарантирует, черт его знает, как оно из базы придет.
xmldiff тоже не катит, потому что он на все изменения порядка срабатывает...
XML::Diff, есть такой модуль, оказался наредкость сырой, и падал на пустых тегах <p></p>
Найти каких либо внятных средств которые бы умели нестрого сравнивать, мне так и не удалось...
В результате пришлось писать свою собственную приблуду сравнивающую деревья с определенными свойствами...
Вывод: бардак в общем виде скорее вреден, чем полезен.
Вот.