If you really need to do this, and you shouldn't, you can probably modify the Stream style to get what you want. Or just write your own style. Check whether the tag finishes my '/>' and output it in the Start handler and do not output anything in the End handler.

And then there is the obXML::Twig version (it doesn't filter attribute values, doing it is left as an exercise to the reader):

#!/usr/bin/perl -w use XML::Twig; XML::Twig->new( twig_handlers => { _all_ => \&replace_text, }, keep_spaces => 1, # to keep the original indentation ) ->parse( \*DATA) ->flush; sub replace_text { my( $t, $elt)= @_; # need to go through all pcdata elements in case thedoc # includes mixed content (last foo element in the example) foreach my $pcdata ($t->descendants( '#PCDATA')) { $pcdata->set_pcdata( my_filter( $pcdata->pcdata) ); } $t->flush; } sub my_filter { $_[0]=~ s{foo}{bar}g; return $_[0]; } __DATA__ <doc> <foo att="foo">foo foo baz</foo> <foo att="foo"/> <foo att="baz">foo foo baz</foo> <foo att="baz">foo <elt>bar foo</elt> foo baz</foo> </doc>

In reply to Re: XML::Parser can't create empty tags? by mirod
in thread XML::Parser can't create empty tags? by graff

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.