[xslt] как сделать такое преобразование

bastii

Есть xml:

<?xml version='1.0' encoding='UTF-8'?>
<VOTABLE
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns='http://www.ivoa.net/xml/VOTable/v1.1'
xsi:schemaLocation='http://www.ivoa.net/xml/VOTable/v1.1
http://www.ivoa.net/xml/VOTable/VOTable-1.1.xsd' version='1.1'
>
<RESOURCE>
<TABLE>
<FIELD ... />
...
<FIELD .../>
<DATA>
<TABLEDATA>
<TR><TD>23585+00390E</TD><TD>0</TD><TD>0</TD><TD>0.036</TD><TD>+</TD><TD>0</TD><TD>40</TD><TD>47.58</TD></TR>
<TR><TD>00015-08290G</TD><TD>0</TD><TD>0</TD><TD>0.123</TD><TD>-</TD><TD>8</TD><TD>36</TD><TD>21.74</TD></TR>
...
<TR><TD>00015+00390E</TD><TD>0</TD><TD>0</TD><TD>0.751</TD><TD>+</TD><TD>0</TD><TD>41</TD><TD>11.26</TD></TR>
<TR><TD>00015-08290G</TD><TD>0</TD><TD>0</TD><TD>5.755</TD><TD>-</TD><TD>8</TD><TD>36</TD><TD>7.75</TD></TR>
<TR><TD>00015+01050E</TD><TD>0</TD><TD>0</TD><TD>5.798</TD><TD>+</TD><TD>1</TD><TD>8</TD><TD>6.68</TD></TR>
</TABLEDATA>
</DATA>
</TABLE>
</RESOURCE>
</VOTABLE>

Мне нужно получить xml, выкинув из исходного строчки (<tr> </tr> где первое поле в строчке равно 0.

6yrop

Можно по-разному, первое, что приходит в голову

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="TR[TD[1] = 0]" priority="1">
</xsl:template>
<xsl:template match="/ | @* | node" priority="0">
<xsl:copy>
<xsl:apply-templates select="@* | node"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

Werdna

Господи, такие простый вещи так сложно делаются, и так тормозят.

6yrop

имхо, XSLT не для таких преобразований

bastii

а что значит так тормозят?

laki

пианиста задели за больное.

Dasar

Тебе действительно это необходимо сделать на xslt?
для задач с удалением обычно лучше подходит любимый язык + xpath.
будет что-то типа:

XmlDocument doc = new XmlDocument;
doc.Load("in.xml");
foreach (XmlNode node in doc.SelectNodes("//tr[td[1]='0']").Clone
{
node.Parent.Remove(node);
}
doc.Save("out.xml");

bastii

Мне это нужно делать на Джава и DOM не очень хорошо, т.к. данных может быть очень много. Данные получаю от веб сервиса через http, пока гружу в память целиком, но результат нужно грузить в одну штуку тоже через веб сервис. По идее потоками нужно делать (ко второму веб сервису даже библиотека клиентская есть под Джава, где можно данные совать в поток). С XSLT вроде нет проблем из потока в поток, но вот ручками боюсь много мороки (да и в Джава с соответствующими апи мало практики). В общем не знаю. А чем все таки XSLT плохо в данном случае?

Barbie29

а масон не пробовали заюзать?

bastii

нет, что это?

Barbie29

это перловая хреновина, типа asp, на ней www.nature.ru сделано, рамблер движок CMS на масоне за 50 килобаксов торгует

bastii

а она тут причем?

bastii

Мне нужна Джава, причем мой код хостится другим веб сервисом.

Barbie29

ну раз нужна, значит нужна, а яб не парился...

Helga87

Дай, пожалуйста, ссылку, где можно прочитать про масон, или хотя бы его название на английском приведи.

Helga87

Спасибо, ща буду читать.

bastii

Теперь все веб программисты счастливы, давайте вернемся к XSLT, в чем там проблема?

Andr163

кто-то попробовал, ему показалось, что медленно, теперь он везде об этом говорит
попробуй, сделаешь выводы для конкретной задачи, на конкретной платформе

bastii

просто хотелось бы делать все правильно, но только это не просто, когда ничего не рубишь в этой теме

Dasar

> А чем все таки XSLT плохо в данном случае?
Он скорее неудобный, чем плохой, т.к. на xslt нельзя записать задачу удаления ненужного, можно только описать задачу копирование нужного.

bastii

Да, но что значит получить файл, который является копией исходного за исключением удаления некоторых фрагментов -- это и будет скопировать то, что нужно оставить. И xsl Шурика мне нравится, думал будет страшнее. Короче зеленый свет варианту с XSLT.

ava3443

Цитата с http://genphys.phys.msu.ru/~dmitriyk/perl/mason.shtml :

<html>
<head><title><% $headline %></title></head>
<body>
<h2><% $headline %></h2>
By <% $author %>, <% $date %><p>

<% $body %>

</body></html>
<%init>
# Fetch article from database
my $dbh = DBI::connect ...;
my $sth = $dbh->prepare("select * from articles where id = ?");
$sth->execute($article_id);
my ($headline,$date,$author,$body) = $sth->fetchrow_array;
# Massage the fields
$headline = uc($headline);
my ($year,$month,$day) = split('-',$date);
$date = "$month/$day";
</%init>
<%args>
$article_id
</%args>

Я конечно подозревал, что Mason - хрень та ещё и в бытность веб-программистом использовал Template::Toolkit, но чтоб вот такие вот примеры новичкам показывать... прямой запрос в базу данных из шаблона... ужас.

bastii

А почему плохо из темплейта в базу лезть? И как надо?

ava3443

Я с трудом себе представляю веб-проект, реализуя который можно позволить себе мешать логику с представлением.

bastii

И как это делается в пхп, логика выделяется в отдельные методы?

Helga87

Да, в php есть средства отделения логики от html-я. Грамотные люди так и пишут.

Barbie29

ага вот вот вот, а потом когда надо просто напечатать print "hello world\n"; впадается в ступор на предмет какой объект какого класса юзается или для этой же операции используется 500 строк кода функции print_hello_world;
имхо, оно излишне все...

Helga87

Аргументируй, пожалуйста, свое утверждение примером. Потому что так можно сказать
ага вот вот вот, а потом когда надо просто напечатать print "hello world\n"; впадается в ступор на предмет какой объект какого класса юзается или для этой же операции используется 50000 строк кода функции print_hello_world;

Barbie29

да пожалуйста, вместо того, чтобы написать print "<title>bla-bla-bla</title>"; с помощью use CGI это выглядит как-то так:
print_title(тут параметры)... этиж параметры надо распарсить, для этого заюзать всякие хеши, думаю, что такое стремление к высокому уровню не только в перле.
Хорошо, ладно, в ситуации, когда надо через сокет что то послать. да, обвязка нужна, потому что облегчает жизнь, но не такое же фатальное темплейтирование.

Helga87

Мы вроде про php речь вели, нет?
Кроме того, то что ты привел как пример, больше похоже на рассуждение вида: "мне знакомый программист рассказывал, что в районе linux.org.ru обсуждали..."

Barbie29

да не в php-жаве-перле дело, а в том наверное, что байт состоит из битов, из наслаивания протокола на протокол уже и не осталось ничего... какие-то предсавления о представлениях...
кста о ЛОРе, там ща такое порево недецкое идет по поводу XML

Helga87

Молодец, зажёг. Спасибо за доставленные положительные эмоции. Почаще заводи подобные треды!

Barbie29

да я тут уже часа два-три сохну просто вы меня конешно простите, поначалу серьезно спросил, но не смог уержаться

FRider

Ну просто супер, я фОнат:
print_title(тут параметры)... этиж параметры надо распарсить, для этого заюзать всякие хеши, думаю, что такое стремление к высокому уровню не только в перле.
да не в php-жаве-перле дело, а в том наверное, что байт состоит из битов, из наслаивания протокола на протокол уже и не осталось ничего... какие-то предсавления о представлениях...
Твои слова мне напоминают известную "лекцию про интернет"( полная версия ) : "В интернете существует много опасностей: хакеры, крякеры, спамы, куки и закладки..."
Уважаемый дон вообще понимает, о чем говорит?

Barbie29

я всей этой дрянью уже 7-8 лет занимаюсь и знаю о чем говорю. И лучше чем принт "хелло ворлд\n"; ниче нету...
http://www.webdocs.ru/articles/article161/ Сколько этот пм весит? 300 кил наверное, если не 500. я уж давно не юзаю сию байду...
...

FRider

Ну ты реальный пацан, весь набор слов(хеши и т.д.) ботал все эти годы?
Кстати, кто скока весит совершенно неважно, а вот сопровождать и отлаживать код, где смешаны логика с представлением, затруднительно..

sasha79

Size doesn't matter, если ты понимаешь, о чем я

Barbie29

> кто скока весит совершенно неважно
э, нет, так разговор то как раз в том числе и об этом. Это просто мания какая-то... Читать трудно? Вот именно что трудно, потому что каждый придумывает свое "представление о" структуризации, канонизации, блаблабла. А потом "xml как вавилонская башня рухнет и похоронит под собой все" (с) какойто анонимус
Ладноб доки хить писали, не былоб претензий, так ведь не пишут... Ты просто и не ибался с этим по реальному то. Ты придешь и скажешь. "О так делать не надо, предыдущий прогер был му№ак" и будешь манагерам лапшу на уши вешать. Как надо. Вот и вся работа. Ты просто не слышишь меня. А так оно и будет с большой вероятностью.

FRider

э, нет, так разговор то как раз в том числе и об этом. Это просто мания какая-то... Читать трудно? Вот именно что трудно, потому что каждый придумывает свое "представление о" структуризации, канонизации, блаблабла. А потом "xml как вавилонская башня рухнет и похоронит под собой все" (с) какойто анонимус
Уважаемого дона трудно понять. Вы собственно о чем говорите? Об отделении представления от логики на пхп или об хмл? Темой не ошиблись?
Ладноб доки хить писали, не былоб претензий, так ведь не пишут... Ты просто и не ибался с этим по реальному то. Ты придешь и скажешь. "О так делать не надо, предыдущий прогер был му№ак" и будешь манагерам лапшу на уши вешать. Как надо. Вот и вся работа.
Да, по реальному с такими проблемами не встречался, ибо пишу на асп.нет. Там нет проблем ни с отделением кода от представления, ни с хмл
Я вовсе не давлю авторитетом...
Уважаемый дон уже приблизился к уровню Фаулера или Бека, чтобы давить СВОИМ авторитетом?
... ты просто не слышишь меня.
я не могу понять тот набор слов, который написан в ваших постах.

Helga87

Ты, молодец, сказал много умных слов, да. Ахинея правда несвязушная. А так ничего.
Да, кстати, ты сделал, или пока не получается?

Barbie29

ага, на XML, датчик сделал, вроде как, только его отлживать надо на нескольких типах камер.

Helga87

Т.е. не работает пока ничего, да?

Barbie29

Вы собственно о чем говорите? Об отделении представления от логики на пхп или об хмл?
да, наверное я тут неправильно поступил, т.к. не корректно сформулировал саму претензию...
Уважаемый дон уже приблизился к уровню Фаулера или Бека, чтобы давить СВОИМ авторитетом?
Если вышеупомянутые уважаемые доны Фаулер и Бек говорят о том, что чтобы напечатать десяток строк с передачей логина и пассворда на клиентскую сторону, необходимо заюзать модуль весом в полмега, то тады я бы с ними не согласился...

Helga87

К счастью, они об этом не говорят!

Barbie29

почемуж, работает, 95% проходит. там подгонка параметров...

Helga87

Можно посмотреть (на самом деле, мне действительно интересно посмотреть на рабочую систему, о которой ты писал в том треде) ?

Barbie29

в личку
Оставить комментарий
Имя или ник:
Комментарий: