#!/usr/bin/perl use strict; use XML::XPath; use XML::XPath::XMLParser; my $xml; my $parser; my $doc; my @node_list; my $itemNumber; my $qty; my $description; my $nodes; my $i; my $item_node; my @inventory = ( "12345R", "Pencil (Red)", 0.29, "12345B", "Pencil (Black)", 0.29, "13579Y", "Notebook (Yellow)", 1.50, "13579R", "Notebook (Red)", 1.50, "13579B", "Notebook (Blue)", 1.50, "13579G", "Notebook (Green)", 1.50, "13579W", "Notebook (White)", 1.50, ); open OUTFILE, ">/tmp/xforms"; while (<STDIN>) { $xml .= $_; } $doc = XML::XPath->new(xml => $xml); @node_list = $doc->findnodes('/Order/OrderLine/Item'); $item_node = $node_list[0]; @node_list = $doc->findnodes('SellersItemIdentification/ID', $item_node); $itemNumber = $doc->getNodeText($node_list[0]); for ($i=0; ($i < scalar @inventory) && ($itemNumber ne $inventory[$i]); $i += 3) { # loop does it all } if ($i != scalar @inventory) { print OUTFILE "About to set description to $inventory[$i+1]\n"; @node_list = $doc->findnodes( "/Order/OrderLine/Quantity" ); $qty = $doc->getNodeText( $node_list[0] ); $doc->setNodeText( "/Order/OrderLine/Item/Description", $inventory[$i+1] ); $doc->setNodeText( "/Order/OrderLine/Item/BasePrice/PriceAmount", $inventory[$i+2] ); print OUTFILE "base price: $inventory[$i+2], qty $qty\n"; $doc->setNodeText( "/Order/LineExtensionTotalAmount", $inventory[$i+2] * $qty ); } else { @node_list = $doc->findnodes( "Description", $item_node ); my $temp = $doc->getNodeText( $node_list[0] ); $doc->setNodeText( "/Order/OrderLine/Item/Description", "No item $itemNumber" ); } print "Content-type: text/xml\n\n"; @node_list = $doc->findnodes( "/Order" ); print $node_list[0]->toString; print OUTFILE $node_list[0]->toString;