shoorick: (Рыжий)
Появилась задача преобразования из одного XML в другой. Метод понятен — это обсуждалось ужеXSLT.

XSLT

Только вот в голове — пусто, почти всё забыл. «Как так? — удивляешься, — Недавно же вроде делал...» Лезешь в багтрекер за деталями — выясняешь ненароком, что «недавно» — это восемь с половиной лет.

http://shoorick.ru/2016/11/12/forgiven-details/
shoorick: (Default)
Поставил hugin под убунтой — стало лучше: в отличие от мандривы, требуется меньше телодвижений: почти не надо елозить мышью — всю работу по поиску ключевых точек (ну или почти всю) autopano-sift выполняет самостоятельно — в мандриве требовалось указать хотя бы одну пару (а лучше три) для всех соседних картинок. На больших панорамах, по десятку снимков, это утомляло. Особенно когда вместо мыши использовался ноутбучный тачпад..

Закат на Александровской сопке

Попутно написал на перле quick and dirty добытчик превьюшек из RSS-потока. Было, в общем-то, три варианта:
  1. Аккуратно разобрать полученный XML (на CPAN есть всякие модули).
  2. Взять с полки книжку, вспомнить про XSLT и сделать именно на нём. Можно даже без перла.
  3. Тупо выдрать нужное регекспами.
Тупо выдрал:
while ( $content =~ s{<item>(.+?)</item>}{}s ) {
    local $_ = $1;
    my ( $title ) = m{<title>(.+?)( / .+?)?</title>};
    my ( $link  ) = m{<link>(.+?)</link>};
    my ( $src   ) = m{<media:thumbnail\s+url="(.+?)"};

    print qq{<a href="$link"><img src="$src" alt="$title" title="$title"></a> };
}
Выдаёт такой список:

Закат на Александровской сопке Александровская сопка. Перед закатом Вид с Александровской сопки в сторону Миасса Вид с Александровской сопки на Златоуст и Таганай Скалы на Александровской сопке

Чую, что надо было всё-таки каким-нибудь из первых двух методов пользоваться, но поленился читать мануалы. Стыд и позор.
shoorick: (Default)
Пожалуй, ковыряние в XSLT до пяти утра — не самое правильное из занятий.

И взятая накануне в библиотеке книга Алексея Валикова «Технология XSLT» не особо помогла — автор то занимается занудным описанием элементов, используя нотацию EBNF (почти что регэкспы), то перескакивает непонятно куда, не объясняя, откуда взялись и что делают какие-то непонятные элементы. И оглавление там непонятное, и алфавитный указатель непривычно беден, и автор зачем-то пробелы и переносы строки обозначает как ? и < соответственно (ага, в книге про язык, в котором этих символов чуть менее, чем дофига), хотя в природе существуют └─┘ и . И бумага газетная, и набрано таймсом... В общем, по сравнению с книгами издательства O'Reilly — фигня какая-то.

И, кстати, экспериментируя весь вечер, я так и не понял, почему, когда я пишу <!DOCTYPE> объявляя сущности внутри документа, например,
<!DOCTYPE text [
<!ENTITY Yat "&#x462;">
<!ENTITY yat "&#x463;">
]>
то всё работает нормально, файрфокс споконо показывает файл, заменяя в нём сущности &Yat; и &yat; на Ѣ и ѣ, а стóит лишь вынести сущности в отдельный файл и сослаться на него — сразу начинает ругаться. В чём причина — я так и не понял.
shoorick: (Default)

Послушав мнение коллег, решил что для преобразований XML → (X)HTML лучше всего подойдёт XSLT. Но чем преобразовывать? Первый попавшийся учебник рассказывал об интерфейсах на разных языках, но перла среди них на было.

Однако, перловый программер про CPAN вспоминает быстро. Недолго думая, нашёл XML::XSLT, в мане на который есть пример, подлежащий весьма небольшой обработке напильником надфилем до работоспособного состояния:

#!/usr/bin/perl -w

use strict;
use XML::XSLT;

die qq{XML Transformer\nUsage:\n\t$0 xml-file xslt-file\n}
    if ($#ARGV < 1);

my $xslt = XML::XSLT->new($ARGV[1], warnings => 1);

$xslt->transform($ARGV[0]);
print $xslt->toString;

$xslt->dispose();
Ковыряюсь дальше...

upd/18:15: ковыряние показало непрограммерский путь:

$ xsltproc xslt-file xml-file

shoorick: (Default)
Задача: надо преобразовать XML в HTML (или в XHTML — особой разницы нет).

Мысль первая — парсить ручками.
Мысль вторая — всё украдено до нас; может быть, имеет смысл взять, например, XML::Parser, распарсить XML им, а затем из получившегося дерева собрать HTML.
Мысль третья — а если пробовать XSLT? Проблема лишь одна — отсутствие знакомства с технологией. С другой стороны, надо же когда-то начинать.

Ув. тов. френды! Поделитесь, пожалуйста, опытом.

Profile

shoorick: (Default)
shoorick

December 2016

S M T W T F S
    1 23
45678910
11121314151617
18 19 2021222324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 12th, 2025 11:31 pm
Powered by Dreamwidth Studios