thomasd has asked for the wisdom of the Perl Monks concerning the following question:
I am having difficulties trying to figure out how to append the text from one Child Node to that of another before moving to the next parent.
I have tried using a few different XML libraries and am currently testing XPath. That is before I decide to just write my own parser which I would rather not do right now.
The following is a sample of the XML page
<xdoc> <MsgSigs> <MsgSig> <Description>TSC1 - Torque/Speed Cntrl 1</Description> <Key>ln1</Key> <XtdFrame>True</XtdFrame> <NetworkKey>net0</NetworkKey> <MsgSignals> </MsgSignals> </MsgSig> <MsgSig> <Description>TSC1 - Torque/Speed Cntrl 1</Description> <Key>ln2</Key> <XtdFrame>True</XtdFrame> <NetworkKey>net0</NetworkKey> <MsgSignals> <Signal> <Description>0_SPN695 Eng. Override </Description> <Key>sig695</Key> <ValueType>1</ValueType> </Signal> </MsgSignals> </MsgSig> </xdoc>
What I am trying to do is loop through the MsgSig nodes and take the key (eg, ln1, ln2) and append this key to the Description. Note: I am not wanting to go into the Signal Node (why I ruled out DOM). The result would look something like this
<xdoc> <MsgSigs> <MsgSig> <Description>TSC1 - Torque/Speed Cntrl 1 (ln1)</Description> <Key>ln1</Key> <XtdFrame>True</XtdFrame> <NetworkKey>net0</NetworkKey> <MsgSignals> </MsgSignals> </MsgSig> <MsgSig> <Description>TSC1 - Torque/Speed Cntrl 1 (ln2)</Description> <Key>ln2</Key> <XtdFrame>True</XtdFrame> <NetworkKey>net0</NetworkKey> <MsgSignals> <Signal> <Description>0_SPN695 Eng. Override </Description> <Key>sig695</Key> <ValueType>1</ValueType> </Signal> </MsgSignals> </MsgSig> </xdoc>
As I mentioned I am currently using XPath and as a test have made it to here and here is where I sit.
#!/usr/bin/perl -w use XML::XPath; use Data::Dumper; $file = "test.xml"; $xp = XML::XPath->new(filename => $file); @nodes = $xp->findnodes("/xdoc/MsgSigs/MsgSig"); foreach (@nodes) { $key = $_->findvalue('Key'); $descr = $_->findvalue('Description'); $text = $descr . "(" . $key . ")"; # A setValue would be awesome right about now or an # appendtext $_-> print $_->findvalue('Description'), "\n"; } #print out to xml file
Any help would be very much appreciated.
D. Thomas
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Appending Text of One XML Node to that of the Other
by choroba (Cardinal) on Feb 04, 2016 at 22:56 UTC | |
by thomasd (Initiate) on Feb 05, 2016 at 18:12 UTC | |
|
Re: Appending Text of One XML Node to that of the Other -- XML::Twig
by Discipulus (Canon) on Feb 05, 2016 at 09:22 UTC | |
by thomasd (Initiate) on Feb 05, 2016 at 18:14 UTC | |
|
Re: Appending Text of One XML Node to that of the Other
by Jenda (Abbot) on Feb 05, 2016 at 22:30 UTC | |
|
Re: Appending Text of One XML Node to that of the Other
by poj (Abbot) on Feb 06, 2016 at 08:05 UTC |