Hi,

I've got a problem whereby I need to compare two xml files for differences. I've already been through XML::SemanticDiff but it's not quite what I'm after as once a rogue element is introduced it reports the rest of the parent element's children as changed too (quite rightly).

I'm not really interested in structural changes as my concerns are around whether or not I want to send the file for translation or not. i.e. all I need to do is compare the two document trees and for any content nodes in file 2 (changed file) that do not exatcly match a (any) node in file 1 (original) mark them for translation.

My problem is that I can't find a way to make XML::Xpath expose the actual Xpath of the node it's processing.

eg.

my $xpath = XML::XPath->new( filename => $new_xml  );
my $nodeset = $xpath->find( "/" );
foreach my $node ( $nodeset->get_nodelist ) {
        print XML::XPath::XMLParser::as_string( $node ) . "\n";
}

Cheerfully prints the file back to the commandline. Does anyone know if there's a way to actually print the XPath of $node.

Greatful thanks for any advice.


In reply to XML::Xpath - Can I get the XPath of the current node? by ianxharris

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.