perl

2013-05-26 8 views
6

का उपयोग कर एचटीएमएल टैग को छोड़कर सबकुछ तोड़ना मैं केवल एचटीएमएल टैग छोड़कर एचटीएमएल दस्तावेज़ से सब कुछ पट्टी करने के लिए एक रास्ता तलाश रहा हूं। क्या किसी के लिए इस विधि के बारे में पता है? मुझे कई पर्ल मॉड्यूल के साथ अनुभव है और इस साइट को पूरी तरह से खोजा है।perl

मैं अपने perl स्क्रिप्ट के लिए एक स्ट्रिंग के रूप में एचटीएमएल पास करना चाहता हूं और टैग को छोड़कर सब कुछ हटा देना चाहता हूं। यहाँ एक उदाहरण है:

आने वाली:

<!doctype html> 
<html> 
<head> 
<title>Example Domain</title> 

<meta charset="utf-8" /> 
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
<meta name="viewport" content="width=device-width, initial-scale=1" /> 
<style type="text/css"> 
body { 
    background-color: #f0f0f2; 
    margin: 0; 
    padding: 0; 
    font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; 

} 
div { 
    width: 600px; 
    margin: 5em auto; 
    padding: 50px; 
    background-color: #fff; 
    border-radius: 1em; 
} 
a:link, a:visited { 
    color: #38488f; 
    text-decoration: none; 
} 
@media (max-width: 700px) { 
    body { 
     background-color: #fff; 
    } 
    div { 
     width: auto; 
     margin: 0 auto; 
     border-radius: 0; 
     padding: 1em; 
    } 
} 
</style>  
</head> 

<body> 
<div> 
    website content .... 
</div> 
</body> 
</html> 

बन जाता है:

<html><head><title></title><meta><meta><meta><style></style></head><body><div><h1></h1>  <p></p><p><a></a></p></div></body></html> 
+0

क्या बनता है? मुझे इससे नफरत है जब लोग ... – hjpotter92

+0

फिक्स्ड, पहली बार इस साइट पर कोड टूल से निपटने। ;) – user2421267

+0

आप टैग विशेषताओं को भी हटाना चाहते हैं? यदि ऐसा है, तो आप एक पूर्व पूर्व// – Robbert

उत्तर

2
#!/usr/bin/perl -- 
use strict; 
use warnings; 
use XML::Twig; 

Main(@ARGV); 
exit(0); 

sub Main { 
    if(@_){ 
     nothing_but_tags("$_") for @_; 
    } else { 
     nothing_but_tags(q{<NoTe 
KunG="FoO" 
ChOp="SuEy"> 
NoteKungFo0Ch0pSuEy 
<To KunG="FoO">ToKungFo0 
<Person KunG="FoO">Satan</Person> 
</To> 
<Beef KunG="FoO"> BeefKunGFoO <SaUsAGe KunG="FoO">is Tasty 
</SaUsAGe> 
</Beef> 
</NoTe>}, 
     ); 
    } 
} 

sub nothing_but_tags 
{ 
    my($input, %opt) = @_; 

    $opt{pretty_print} ||= 'indented' ; 

    my $t = XML::Twig->new(
     %opt, 
     force_end_tag_handlers_usage => 1, 
     start_tag_handlers => { 
      _all_ => sub { 
       if($_->has_atts){ 
        $_->set_atts ({}); 
       } 
       return; 
      }, 
     }, 
     end_tag_handlers => { _all_ => sub { $_->flush; return }, }, 
     char_handler => sub { '' }, 
    ); 
    $t->xparse($_[0]); 
    $t->flush(); 
    (); 
} 
__END__ 
<NoTe> 
    <To> 
    <Person></Person> 
    </To> 
    <Beef> 
    <SaUsAGe></SaUsAGe> 
    </Beef> 
</NoTe> 
0

इस तरह के एक बदलने XSLT के साथ बहुत आसान है, इसलिए यहाँ XML का उपयोग एक उदाहरण है :: LibXSLT।

#!/usr/bin/perl 
use strict; 

use XML::LibXML; 
use XML::LibXSLT; 

my $filename = $ARGV[0] or die("Usage: $0 filename\n"); 
my $doc  = XML::LibXML->load_html(location => $filename); 

my $stylesheet_doc = XML::LibXML->load_xml(string => <<'EOF'); 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="*"> 
     <xsl:copy> 
      <xsl:apply-templates select="*"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
EOF 

my $xslt  = XML::LibXSLT->new; 
my $stylesheet = $xslt->parse_stylesheet($stylesheet_doc); 
my $result  = $stylesheet->transform($doc); 

print $result->serialize_html; 
0

अगर मैं अच्छी तरह से समझ में अपने प्रश्न लेकिन छोड़ने के लिए सिर्फ टैग आप पट्टी टैग से उत्पादन ले सकता है मुझे पता नहीं (केवल टैग पट्टी) और फिर मूल पाठ में अशक्त के साथ इस उत्पादन की जगह। सिद्धांत रूप में पहला फ़ंक्शन आपको टैग के बाहर सटीक टेक्स्ट देगा और अगला चरण इस पाठ को शून्य के साथ बदल देगा।

 संबंधित मुद्दे