1XML::Smart::Tutorial(3)User Contributed Perl DocumentatioXnML::Smart::Tutorial(3)
2
3
4

NAME

6       XML::Smart::Tutorial - Tutorial and examples for XML::Smart.
7

SYNOPSIS

9       This document is a tutorial for XML::Smart and shows some examples of
10       usual things.
11

Working with contents:

13       In XML::Smart the key CONTENT is reserved and shouldn't be used
14       directly, since XML::Smart will deal with the convertion of arguments
15       to node contents, including multiple node contents autimatically.
16
17   What happens when you set a value:
18         $xml->{root}{foo} = 'simple value' ;
19
20       Here foo will be a normal argument/attribute value, and will generate
21       this XML data:
22
23         <root foo="simple value"/>
24
25       But if you insert some tag or lines in the values by default XML::Smart
26       will convert it to a node content:
27
28         $xml->{root}{foo} = "line0\nlien1\nline2\n" ;
29
30       And will generate that XML data:
31
32         <root>
33         <foo>line0
34         lien1
35         line2
36         </foo>
37         </root>
38
39       But what you can do if you want to force some type, let's say, have a
40       node content with a simple value:
41
42         $xml->{root}{foo} = 'simple value' ;
43         $xml->{root}{foo}->set_node(1) ;
44
45       And will generate that XML data:
46
47         <root>
48           <foo>simple value</foo>
49         </root>
50
51   Multiple contents:
52       When you have interpolated content/data you need to work in a
53       different. Let's say that you load this XML data:
54
55         <root>
56         content0
57         <tag1 arg="1"/>
58         content1
59         </root>
60
61       If you access directly the root key as string you will get all the
62       content parts grouped.  So, this code:
63
64         my $xml = new XML::Smart(q`
65         <root>
66         content0
67         <tag1 arg="1"/>
68         content1
69         </root>
70         `,'smart') ;
71
72         print "#$xml->{root}#" ;
73
74       Will print that:
75
76         #
77         content0
78
79         content1
80         #
81
82       To access each part of the content independently you should use an
83       array that receive the method content():
84
85         my @content = $xml->{root}->content ;
86
87         print "#$content[0]#\n" ;
88
89       And this will print that:
90
91         #
92         content0
93         #
94
95       Now to set the multiple content values you should use the method
96       content() with 2 arguments:
97
98         $xml->{root}->content(0,'new content') ;
99
100       And now the XML data produced will be:
101
102         <root>new content<tag1 arg="1"/>
103         content1
104         </root>
105
106       If you use the method content() with only one argument it will remove
107       all the multiple contents and will set the new value in the place of
108       the 1st content.
109

Setting the XML Parser.

111       By defaul XML::Smart will use XML::Parser or XML::Smart::Parser (in
112       this order of preference) to load a XML data.
113
114       To force or define by your self the parser you can use the 2nd argument
115       option when creating a XML::Smart object:
116
117         my $xml = new XML::Smart( 'some.xml' , 'XML::Parser' ) ;
118
119         ## and
120
121         my $xml = new XML::Smart( 'some.xml' , 'XML::Smart::Parser' ) ;
122
123       XML::Smart also has an extra parser, XML::Smart::HTMLParser, that can
124       be used to load HTML as XML, or to load wild XML data:
125
126         my $xml = new XML::Smart( 'some.xml' , 'XML::Smart::HTMLParser' ) ;
127
128       Aliases for the parser options:
129
130         SMART|REGEXP   => XML::Smart::Parser
131         HTML           => XML::Smart::HTMLParser
132
133       So, you can use as:
134
135         my $xml = new XML::Smart( 'some.xml' , 'smart' ) ;
136         my $xml = new XML::Smart( 'some.xml' , 'html' ) ;
137

Customizing the Parser.

139       You can customize the way that the parser will treat the XML data:
140
141   Forcing nodes/tags and arguments/attributes to lowercase or upercase:
142         ## For lower case:
143
144         my $xml = new XML::Smart( 'some.xml' ,
145         lowtag => 1 ,
146         lowarg => 1 ,
147         ) ;
148
149         ## For uper case:
150
151         my $xml = new XML::Smart( 'some.xml' ,
152         upertag => 1 ,
153         uperarg => 1 ,
154         ) ;
155
156   Loading arguments without values (flags) as a TRUE boolean:
157       ** Note, this option will work only when the XML is parsed by
158       XML::Smart::HTMLParser, since only it accept arguments without values!
159
160         my $xml = new XML::Smart(
161         '<root><foo arg1="" flag></root>' ,
162         'XML::Smart::HTMLParser' ,
163         arg_single => 1 ,
164         ) ;
165
166       Here's the tree of the example above:
167
168         'root' => {
169                     'foo' => {
170                                'flag' => 1,
171                                'arg1' => ''
172                              },
173                   },
174
175   Customizing the parse events:
176       XML::Smart can redirect the parsing process to personalized functions:
177
178         my $xml = XML::Smart->new( 'some.xml' ,
179         on_start => \&on_start ,
180         on_char  => \&on_char ,
181         on_end   => \&on_end ,
182         ) ;
183
184         sub on_start {
185           my ( $tag , $pointer , $pointer_back ) = @_ ;
186           $pointer->{$tag}{type_user} = 1 if $tag =~ /(?:name|age)/ ;
187         }
188
189         sub on_char {
190           my ( $tag , $pointer , $pointer_back , $content) = @_ ;
191           $$content =~ s/\s+/ /gs ;
192         }
193
194         sub on_end {
195           my ( $tag , $pointer , $pointer_back ) = @_ ;
196           $pointer->{$tag}{type_extra} = 1 if $tag =~ /(?:more|tel|address)/ ;
197         }
198

AUTHOR

200       Graciliano M. P. <gm@virtuasites.com.br>
201
202       I will appreciate any type of feedback (include your opinions and/or
203       suggestions). ;-P
204
205       Enjoy and thanks for who are enjoying this tool and have sent e-mails!
206       ;-P
207

ePod

209       This document was written in ePod (easy-POD), than converted to POD,
210       and from here you know the way.
211
212
213
214perl v5.34.0                      2022-01-21           XML::Smart::Tutorial(3)
Impressum