+ All Categories
Home > Technology > XML::Liberal

XML::Liberal

Date post: 15-Jan-2015
Category:
Upload: tatsuhiko-miyagawa
View: 2,992 times
Download: 0 times
Share this document with a friend
Description:
in YAPC::NA 2006
36
XML::Liberal Tatsuhiko Miyagawa [email protected] Six Apart, Ltd. / Shibuya Perl Mongers YAPC::NA 2006 Chicago
Transcript
Page 1: XML::Liberal

XML::Liberal

Tatsuhiko Miyagawa [email protected]

Six Apart, Ltd. / Shibuya Perl Mongers YAPC::NA 2006 Chicago

Page 2: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

Quiz:What's wrong

with following XMLs?

Page 3: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0"?><heroes>Larry & Damian</heroes>

Page 4: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0"?><heroes>Larry &amp; Damian</heroes>

Page 5: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0"?><shout>I &hearts; Perl &amp; Ruby!</shout>

Page 6: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0"?><shout>I &#x2665; Perl &amp; Ruby!</shout>

Page 7: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0"?><html><body><a href=foo.html>Foo foo!</a></body></html>

Page 8: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0"?><html><body><a href="foo.html">Foo foo!</a></body></html>

Page 9: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0"?><html><body><a href="/search?q=YAPC+NA&hl=en">Search for YAPC</a></body></html>

Page 10: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0"?><html><body><a href="/search?q=YAPC+NA&amp;hl=en">Search for YAPC</a></body></html>

Page 11: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0"?><rss version="2.0"><channel><item> <title>YAPC is love</title> <content:encoded>Here I am!</content:encoded></item></channel></rss>

Page 12: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0"?><rss version="2.0 xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><item> <title>YAPC is love</title> <content:encoded>Here I am!</content:encoded></item></channel></rss>

Page 13: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0" encoding="utf-8"?><search><result> <excerpt>YAPC 最高 ! ...</excerpt></result></search>

Page 14: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

<?xml version="1.0" encoding="utf-8"?><search><result> <excerpt>YAPC 最高 !□...</excerpt></result></search>

Page 15: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

If you'rea feed publisher,

Make sureyour feed is valid.

Page 16: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

If you're a feed consumer,Not being able

to parse broken feeds might make your users

unhappy.

Page 17: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

As we sawin the Quiz

Page 18: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

Detecting XML errorsIs easy and simple

(sometimes).

Page 19: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

Browsers dealWith it.

Page 20: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

Human canparse it.

Page 21: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

Why not XML parsersdoing the same

thing?

Page 22: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

XML::LiberalDoes it for you.

Page 23: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

Demo

Page 24: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

Usage #1If you use

XML::LibXML

Page 25: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

use strict;use XML::LibXML;

my $parser = XML::LibXML->new;my $doc = $parser->parse_string($xml);

Page 26: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

use strict;use XML::Liberal;

my $parser = XML::Liberal->new("LibXML");my $doc = $parser->parse_string($xml);

Page 27: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

Note: There's NOperformance

drawbackIf the data is valid

Page 28: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

$parser->max_fallback(3)

Page 29: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

Usage #2If you use

XML::LibXMLWithout control tochange the code

Page 30: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

use strict;use XML::Liberal;

XML::Liberal->globally_override('LibXML');

# later on …my $parser = XML::LibXML->new;

Page 31: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

Usage #3If you don't use

LibXML

Page 32: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

use strict;use XML::FooParser;

$doc = parse_xml($xml);

Page 33: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

use strict;use XML::FooParser;use XML::Liberal;

eval { $doc = parse_xml($xml) };if ($@){ my $p = XML::Liberal->new('LibXML'); my $d = $p->parse_string($xml); $xml = $d->toString(1); $doc = parse_xml($xml);}

Page 34: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

XML::LiberalCame out of Plaggerhttp://plagger.org/

Page 35: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

cpan XML::Liberal

Page 36: XML::Liberal

Tatsuhiko MiyagawaTatsuhiko Miyagawa 2006/06/28 YAPC::NA 20062006/06/28 YAPC::NA 2006

Thank you


Recommended