in reply to Replace MathML content using Twig

What 'this'? Here's a way to run through the XML and replace the contents of mml:mi elements with '...'. Maybe that's enough to get you started?

#!/usr/local/bin/perl use strict; use warnings; use XML::Twig; my $xml = <<XML; <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML"> <mml:mstyle mathsize="1em"> <mml:mi>s</mml:mi> <mml:mo>+</mml:mo> <mml:mi>s</mml:mi> </mml:mstyle> </mml:math> XML my $twig = XML::Twig->new ( twig_roots => {'mml:mi' => \&subst,}, # process the element twig_print_outside_roots => 1, # print the rest ); $twig->parse ($xml); sub subst { my ($twig, $value) = @_; print '<mml:mi>...</mml:mi>'; }

Prints:

<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML"> <mml:mstyle mathsize="1em"> <mml:mi>...</mml:mi> <mml:mo>+</mml:mo> <mml:mi>...</mml:mi> </mml:mstyle> </mml:math>

Update: fix copy and paste madness.

True laziness is hard work

Replies are listed 'Best First'.
Re^2: Replace MathML content using Twig
by renovatio (Initiate) on May 10, 2011 at 10:42 UTC
    Thank you so much!!
    That is very helpful for me.
    BTW
    Can I add some conditions in <subst>?
    The original xhtml file:
    .... <mml:mi>s</mml:mi> <mml:mi>sin</mml:mi> ..

    Only <mml:mi>s</mml:mi> just replace with <mml:mi>x</mml:mi>.
    the result:
    New xhtml file
    .... <mml:mi>x</mml:mi> <mml:mi>sin</mml:mi> ..

      Sure. Change the sub to:

      sub subst { my ($twig, $value) = @_; $value->subs_text ('^s$', 'x'); $value->print (); }

      I can thoroughly recommend the XML::Twig documentation by the way. It is long, but there are some really good examples.

      True laziness is hard work