Автор Тема: XML::XSLT выборка  (Прочитано 3575 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dimk

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
XML::XSLT выборка
« : 22 Апреля 2008, 11:08:52 »
Почему не работает выборка с XML::XSLT?
Пробовал в версии 0.40 c activestate и 0.48 CPAN.
В IE выбирается правильно, а XML::XSLT выбирает только последний элемент.


$xml 
qq~<?xml version="1.0" encoding="utf-8"?>
<people>
 <person sex="male">zzz</person>
 <person sex="male">aaa</person>
 <person sex="female">ccc</person>
 <person sex="female">ggg</person>
</people>~;

$xsl = qq~<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/people">
 <ul>
  <xsl:apply-templates select="/people/person[@sex=\'male\']" />
 </ul>
</xsl:template>
<xsl:template match="/people/person[@sex=\'male\']">
 <li><xsl:value-of select=\'.\' /></li>
</xsl:template>
</xsl:stylesheet>~;

use XML::XSLT;
print XML::XSLT->new($xsl, warnings=>1)->transform ($xml)->toString;
« Последнее редактирование: 22 Апреля 2008, 13:33:01 от dimk »

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
XML::XSLT выборка
« Ответ #1 : 22 Апреля 2008, 17:18:49 »
у меня эксплойер выдал ошибку, в принципе более полную информацию я получил сделав debug:
XML::XSLT->new($xsl, warnings=>1, debug=>1)
и при use strict; есть одна ошибка интерполяции массива @sex, заменил qq на q.
вот... возможно позже еще вернусь к этому вопросу
убили кенни, сволочи

Оффлайн dimk

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
XML::XSLT выборка
« Ответ #2 : 22 Апреля 2008, 19:08:24 »
Спасибо, действительно не экранировал @sex, надо \\@sex

XSLT начал изучать только что. вопросы:
1. Мне надо применить шаблон к элементу с определенным значением атрибута. Правильно ли я делаю в принципе, или чаще используют другие способы?

2. Поддерживает ли такую выборку XML::XSLT?
в описании написано, что поддержка xsl:apply-templates ограничена.

3. Какой модуль для XSLT и perl под windows лучше использовать? mod-xslt2 для windows apache не установить?

Оффлайн dimk

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
XML::XSLT выборка
« Ответ #3 : 22 Апреля 2008, 19:46:43 »
Установил XML::LibXSLT, заработало.

use XML::XSLT::Wrapper;
my $xslt XML::XSLT::Wrapper->new(ProcessorList => [\'libxslt\'],);
print $xslt->transform(XMLString => $xml, XSLString => $xsl);

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28