HTML-TreeBuilder-XPath
view release on metacpan or search on metacpan
lib/HTML/TreeBuilder/XPath.pm view on Meta::CPAN
if( $name eq '~pi') { return '<?' . _xml_escape_text( $node->{text}) . '?>'; }
if( $name eq '~comment') { return '<!--' . _xml_escape_comment( $node->{text}) . '-->'; }
my $lc_name= lc $name;
my $xml= $node->_start_tag;
if( $HTML::Tagset::isCDATA_Parent{$lc_name})
{ my $content= $node->{_content} || '';
if( ref $content eq 'ARRAY' || $content->isa( 'ARRAY'))
{ $xml .= _xml_escape_cdata( join( '', @$content), $opt); }
else
{ $xml .= $content; }
}
else
{ # start tag
foreach my $child ($node->content_list)
{ if( ref $child) { $xml .= $child->as_XML_compact(); }
else { $xml .= _xml_escape_text( $child); }
}
}
lib/HTML/TreeBuilder/XPath.pm view on Meta::CPAN
if(!$phrase_name{$lc_name}) { $pre_tag_indent= "\n" . ($opt->{indent} || $default_indent) x ($opt->{indent_level}||0); }
if( $opt->{indent_level}) { $xml .= $pre_tag_indent; }
$xml.= $node->_start_tag();
my $content='';
if( $HTML::Tagset::isCDATA_Parent{$lc_name})
{ my $content= $node->{_content} || '';
if( ref $content && (ref $content eq 'ARRAY' || $content->isa( 'ARRAY') ))
{ $content= _xml_escape_cdata( join( '', @$content), $opt); }
}
else
{
my %child_opt= %$opt;
$child_opt{indent_level}++;
foreach my $child ($node->content_list)
{ if( ref $child) { $content .= $child->as_XML_indented( \%child_opt ); }
else { $content .= _xml_escape_text( $child); }
}
}
lib/HTML/TreeBuilder/XPath.pm view on Meta::CPAN
return $text;
}
sub _xml_escape_comment
{ my( $text)= @_;
$text=~ s{([&<>])}{$CHAR2DEFAULT_ENT{$1}}g;
$text=~ s{--}{--}g; # can't have double --'s in XML comments
return $text;
}
sub _xml_escape_cdata
{ my( $text, $opt)= @_;
if( $opt->{force_escape_cdata} || $text=~ m{[<&]})
{ $text=~ s{^\s*\Q<![CDATA[}{}s;
$text=~ s{\Q]]>\E\s*$}{}s;
$text=~ s{]]>}{]]>}g; # can't have]]> in CDATA
$text= "<![CDATA[$text]]>";
}
return $text;
}
package HTML::TreeBuilder::XPath::TextNode;
( run in 0.721 second using v1.01-cache-2.11-cpan-454fe037f31 )