понедельник, 2 ноября 2009 г.

Фильтр для преобразования odt в html

Самый что ни на есть распрекрасный odt тоже нужно индексировать. "С помощью лома и какой-то матери" нашел ODF Tools, которые производят на свет неплохой html. Опять же, плодя временные файлы. Единственный плюс сего проекта - дают адекватную xslt-таблицу преобразования. Но что они с ней вытворяют, это же уму не постижимо. Чтение исходников привело к мысли, что все гораздо проще делается, например, так


cat <(echo "<?xml version='1.0' encoding='UTF-8'?>")\
<(echo "<office:document xmlns:office='urn:oasis:names:tc:opendocument:xmlns:office:1.0'>")\
<(unzip -p 101.odt meta.xml |grep -v "<?xml version=") \
<(unzip -p 101.odt content.xml |grep -v "<?xml version=") \
<(unzip -p 101.odt styles.xml |grep -v "<?xml version=") \
<(echo "</office:document>")\
|xsltproc odt2html.xsl -


Оно работает, и без временных файлов. Но, как я понимаю, это "башизм" и с ним надо бороться. Вопрос - как? Не соображу, как бы это переписать да еще без вызова лишних утилит...

Upd.

Спасибо Serhiy Storchaka за подсказку, все решается просто:


(echo "<?xml version='1.0' encoding='UTF-8'?>"
echo "<office:document xmlns:office='urn:oasis:names:tc:opendocument:xmlns:office:1.0'>"
unzip -p 101.odt meta.xml |grep -v "<?xml version="
unzip -p 101.odt content.xml |grep -v "<?xml version="
unzip -p 101.odt styles.xml |grep -v "<?xml version="
echo "</office:document>") | xsltproc odt2html.xsl -

2 комментария:

lispnik комментирует...

Зачем less на концах пайпов???

Кроме того, я попробовал бы так, без лишнего cat:

(echo ...; echo ...; unzip ... | grep -v ...; и так далее) | xsltproc odt2html.xsl -

Печников Алексей комментирует...

less по ошибке добавлен, убрал. Благодарю за внимательность.

Команды через ; это отдельные процессы, как я понимаю, теоретически они могут и параллельно запускаться. В debian-russian подсказали более true way, см. выше. В самом деле, cat оказался совсем не нужен, перемудрил я.


(C) Alexey Pechnikov aka MBG, mobigroup.ru