bendon has asked for the wisdom of the Perl Monks concerning the following question:

<style type="text/css"> </style>

Hello Team,

I have an XML file below and I want to replace the data within the elements inside <datafield tag="650" ind1=" " ind2="2"> where the criteria matches the data within <subfield code="0">(OSt)1363</subfield>.

For instance if i have this,

<datafield tag="650" ind1=" " ind2="2"> <subfield code="a">Toxicology.</subfield> <subfield code="0">(OSt)1363</subfield> </datafield>
I would like it to be replaced to be,
<datafield tag="650" ind1=" " ind2="2"> <subfield code="a">Research work </subfield> <subfield code="0">(OSt)1000</subfield> </datafield>
My Perl code is here,
my $twig = XML::Twig->new( twig_handlers => { subfield => \&editSubfield, }, pretty_print => 'indented', ); $twig->parse($xml); sub editSubfield { my ( $twig, $href) = @_; my $text = $href->text(); $href->set_text($rcnnew) if $text eq $rcnorig; }
Below is my XML file. Thanks
<?xml version="1.0" encoding="UTF-8"?> <collection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/ +standards/marcxml/schema/MARC21slim.xsd" xmlns="http://www.loc.gov/MARC21/slim"> <record> <leader>00722cam a2200241 4500</leader> <controlfield tag="001">1278</controlfield> <controlfield tag="005">19830304000000.0</controlfield> <controlfield tag="008">690320s1969 mdu b 001 0 eng </controlfield> <datafield tag="010" ind1=" " ind2=" "> <subfield code="a"> 68022712</subfield> </datafield> <datafield tag="040" ind1=" " ind2=" "> <subfield code="a">DLC</subfield> <subfield code="c">DLC</subfield> <subfield code="d">NOH</subfield> </datafield> <datafield tag="050" ind1="0" ind2=" "> <subfield code="a">RA1211</subfield> <subfield code="b">.G5 1969</subfield> </datafield> <datafield tag="082" ind1=" " ind2=" "> <subfield code="a">615.9</subfield> </datafield> <datafield tag="100" ind1="1" ind2=" "> <subfield code="a">Gleason, Marion N.</subfield> <subfield code="0">(OSt)1362</subfield> </datafield> <datafield tag="245" ind1="1" ind2="0"> <subfield code="a">Clinical toxicology of commercial products;</subfie +ld> <subfield code="b">acute poisoning</subfield> <subfield code="c">by Marion N. Gleason and others</subfield> </datafield> <datafield tag="250" ind1=" " ind2=" "> <subfield code="a">3d ed.</subfield> </datafield> <datafield tag="260" ind1=" " ind2=" "> <subfield code="a">Baltimore,</subfield> <subfield code="b">Williams &amp; Wilkins,</subfield> <subfield code="c">1969.</subfield> </datafield> <datafield tag="300" ind1=" " ind2=" "> <subfield code="a">1 v. (various pagings)</subfield> <subfield code="c">26 cm.</subfield> </datafield> <datafield tag="504" ind1=" " ind2=" "> <subfield code="a">Includes bibliographies.</subfield> </datafield> <datafield tag="650" ind1=" " ind2="2"> <subfield code="a">Toxicology.</subfield> <subfield code="0">(OSt)1363</subfield> </datafield> <datafield tag="650" ind1=" " ind2="2"> <subfield code="a">Poisons.</subfield> <subfield code="0">(OSt)1364</subfield> </datafield> <datafield tag="935" ind1=" " ind2=" "> <subfield code="a">AAA-0400</subfield> </datafield> <datafield tag="945" ind1=" " ind2=" "> <subfield code="a">QV 600 G554 1969</subfield> </datafield> <datafield tag="999" ind1=" " ind2=" "> <subfield code="c">391</subfield> <subfield code="d">391</subfield> </datafield> </record> </collection>

Replies are listed 'Best First'.
Re: Replacing Data within XML Element
by Anonymous Monk on May 24, 2013 at 22:12 UTC
Re: Replacing Data within XML Element
by Anonymous Monk on May 24, 2013 at 21:59 UTC
    The code you posted is incomplete, it won't run as written

    Also, you're not using <c> or <code> to surround the code/data you're posting