summaryrefslogtreecommitdiff
path: root/t/06-libxml.t
blob: 0151f9858a75072aa9c10337b24ec45ab2c8292e (plain)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!perl 
package main; 
use Test::Most 'die';
BEGIN {
    eval 'use XML::LibXML;use XML::LibXML::XPathContext;';
    plan skip_all => 'XML::LibXML and XML::LibXML::XPathContext needed for this test' if $@;
}
 
package XmlTransform;{ 
 use Tree::Transform::XSLTish ':engine';
 use strict;
 use warnings;
 
 engine_class 'XML::LibXML::XPathContext';
 
 default_rules;
 
 tree_rule match => 'img[@alt="pick"]'action => sub {
     return $_[0]->it->findvalue('@src');
 };
 
}
 
package NSXmlTransform;{ 
 use Tree::Transform::XSLTish ':engine';
 use XML::LibXML::XPathContext;
 use strict;
 use warnings;
 
 engine_factory {
     my $e=XML::LibXML::XPathContext->new();
     $e->registerNs('t','http://test/');
     return $e;
 };
 
 default_rules;
 
 tree_rule match => 't:img[@alt="pick"]'action => sub {
     return $_[0]->it->findvalue('@src');
 };
 
}
 
package main; 
use strict;
use warnings;
plan tests=>2;
 
{
my $tree=XML::LibXML->new->parse_string(<<'XML');
<html>
 <body>
  <p>test</p>
  <img src="nothing" />
  <img src="this one" alt="pick" />
 </body>
</html>
XML
 
my $trans=XmlTransform->new();
my @results=$trans->transform($tree);
is_deeply \@results,['this one'],'XML example';
}
 
{
my $tree=XML::LibXML->new->parse_string(<<'XML');
<html xmlns:x="http://test/">
 <body>
  <p>test</p>
  <img src="nothing" />
  <img src="NOT this one" alt="pick" />
  <x:img src="this one" alt="pick" />
 </body>
</html>
XML
 
my $trans=NSXmlTransform->new();
my @results=$trans->transform($tree);
is_deeply \@results,['this one'],'XML namespaces';
}