Name Data::Edit::Xml - Edit data held in Xml format Synopsis use Data::Edit::Xml; say STDERR Data::Edit::Xml::new(inputString=>< # Docbook
  • Diagnose the problem

    This can be quite difficult

    Sometimes impossible

  • ls -la

        drwxr-xr-x  2 phil phil   4096 Jun 15  2016 Desktop
        drwxr-xr-x  2 phil phil   4096 Nov  9 20:26 Downloads
        

  • END by(sub # Transform Docbook to Dita {my ($o, $p) = @_; if ($o->at(qw(pre p li sli)) and $o->isOnlyChild) {$o->change($p->isFirst ? qw(cmd) : qw(stepresult)); $p->unwrap; } elsif ($o->at(qw(li sli)) and $o->over(qr(\Ap( p)+\Z))) {$_->change($_->isFirst ? qw(cmd) : qw(info)) for $o->contents; } })->by(sub {my ($o) = @_; $o->change(qw(step)) if $o->at(qw(li sli)); $o->change(qw(steps)) if $o->at(qw(sli)); $o->id = 's'.($o->position+1) if $o->at(qw(step)); $o->id = 'i'.($o->index+1) if $o->at(qw(info)); $o->wrapWith(qw(screen)) if $o->at(qw(CDATA stepresult)); })->string =~ s/>\n # # Diagnose the problem # This can be quite difficult # Sometimes impossible # # # ls -la # # # drwxr-xr-x 2 phil phil 4096 Jun 15 2016 Desktop # drwxr-xr-x 2 phil phil 4096 Nov 9 20:26 Downloads # # # # Description Constructor new() New parse - call this method statically as in Data::Edit::Xml::new() with keyword parameters=> chosen from: inputString a string of xml to be parsed inputFile a file of xml to be parsed name a symbolic name for this parse used in messages about this parse and to name output files generated by this parse output a directory into which to write output files errors a sub directory of 'output' into which to write a copy of the string to be parsed in the event that an xml parse error is encountered while parsing this string cdata() The name of the command name to use to represent text Stringification Print the parse tree string($node) Build a string from a node of a parse tree and the nodes below it Parameter Description 1 $node Start node stringWithCondition($node, @conditions) Build a string from a node of a parse tree and the nodes below it subject to conditions to reject some nodes Parameter Description 1 $node Start node 2 @conditions conditions in effect addConditions($node, @conditions) Add conditions to a node Parameter Description 1 $node Node 2 @conditions conditions to add deleteConditions($node, @conditions) Delete conditions applied to a node Parameter Description 1 $node Node 2 @conditions conditions to add listConditions($node) List conditions applied to a node Parameter Description 1 $node Node isText($node) Is this a text node? Parameter Description 1 $node Node to test Attributes Get or set attributes attr :lvalue($node, $attribute) Value of attribute in current command Parameter Description 1 $node Node in parse tree 2 $attribute attribute name setAttr($node, %values) Set the value of an attribute in a command Parameter Description 1 $node Node in parse tree 2 %values (attribute name=>new value)* Contents Contents of the current node contents($node) Get all the nodes contained by this node as an array (not an array reference) Parameter Description 1 $node Node contentBeyond($node) Get all the nodes beyond this node at the level of this node Parameter Description 1 $node Node contentBefore($node) Get all the nodes before this node at the level of this node Parameter Description 1 $node Node contentAsTags($node) Get the tags of all the nodes contained by this node as a string Parameter Description 1 $node Node contentBeyondAsTags($node) Get the tags of all the nodes beyond this node as a string Parameter Description 1 $node Node contentBeforeAsTags($node) Get the tags of all the nodes before this node as a string Parameter Description 1 $node Node position($node) Find the position of a node in its parent's content Parameter Description 1 $node Node index($node) Find the position of a node in its parent's index Parameter Description 1 $node Node Navigation Move around in the parse tree context($node) Tags of this node and its ancestors joined to make a string Parameter Description 1 $node Node get($node, @position) Get a sub node under the current node by its position in each index with position zero assumed if no position is supplied Parameter Description 1 $node Node 2 @position position specification: (index c($node, $tag, $position) Get all the nodes with the tag of the specified name below the current node Parameter Description 1 $node Node 2 $tag tag 3 $position first($node) Get the first node below this node Parameter Description 1 $node Node last($node) Get the last node below this node Parameter Description 1 $node Node isFirst($node) Is this node first under its parent? Parameter Description 1 $node Node isLast($node) Is this node last under its parent? Parameter Description 1 $node Node isOnlyChild($node) Is this the only child of its parent? Parameter Description 1 $node Node next($node) Get the node next to the current node Parameter Description 1 $node Node prev($node) Get the node previous to the current node Parameter Description 1 $node Node by($node, $sub, @context) Post-order traversal of a parse tree or sub tree - based on experience this is the most useful way to process xml documents Parameter Description 1 $node Starting node 2 $sub sub to call for each sub node 3 @context accumulated context at() Check the node is in the context specified by the array of tags from the ancestors going up the parse tree from the node over($node, $re) Match the tags at the level below a node against a regular expression Parameter Description 1 $node Node 2 $re regular expression after($node, $re) Match the tags in the current level after a node against a regular expression Parameter Description 1 $node Node 2 $re regular expression before($node, $re) Match the tags in the current level before a node against a regular expression Parameter Description 1 $node Node 2 $re regular expression up($node, @tags) Go up to a specified context Parameter Description 1 $node Start node 2 @tags tags identifying context Editing Edit the data in the parse tree change($node, $name, @tags) Change the name of a node in an optional tag context Parameter Description 1 $node Node 2 $name new name 3 @tags tags defining the context deleteAttr($node, $attr, $value) Delete the attribute, optionally checking its value first Parameter Description 1 $node Node 2 $attr attribute name 3 $value optional attribute value to check first renameAttr($node, $old, $new) Change the name of an attribute regardless of whether the new attribute already exists Parameter Description 1 $node Node 2 $old existing attribute name 3 $new new attribute name changeAttr($node, $old, $new) Change the name of an attribute unless it is already there Parameter Description 1 $node Node 2 $old existing attribute name 3 $new new attribute name renameAttrValue($node, $old, $oldValue, $new, $newValue) Change the name and value of an attribute regardless of whether the new attribute already exists Parameter Description 1 $node Node 2 $old existing attribute name and value 3 $oldValue new attribute name and value 4 $new 5 $newValue changeAttrValue($node, $old, $oldValue, $new, $newValue) Change the name and value of an attribute unless it is already there Parameter Description 1 $node Node 2 $old existing attribute name and value 3 $oldValue new attribute name and value 4 $new 5 $newValue Structure Change the structure of the parse tree wrapWith($old, $tag) Wrap the original node in a new node forcing the original node down deepening the parse tree Parameter Description 1 $old Node 2 $tag tag for new node wrapContentWith($old, $tag) Wrap the content of a node in a new node, the original content then contains the new node which contains the original node's content Parameter Description 1 $old Node 2 $tag tag for new node unwrap($node) Unwrap a node by inserting its content into its parent at the point containing the node Parameter Description 1 $node Node to unwrap replaceWith($old, $new) Replace a node (and all its content) with a new node (and all its content) Parameter Description 1 $old Old node 2 $new new node Cut and Put Move nodes around in the parse tree cut($node) Cut out a node - remove the node from the parse tree and return it so that it can be put else where Parameter Description 1 $node Node to cut out putNext($old, $new) Place the new node just after the original node in the content of the parent Parameter Description 1 $old Original node 2 $new new node putPrev($old, $new) Place the new node just before the original node in the content of the parent Parameter Description 1 $old Original node 2 $new new node putFirst($old, $new) Place the new node at the front of the content of the original node Parameter Description 1 $old Original node 2 $new new node putLast($old, $new) Place the new node at the end of the content of the original node Parameter Description 1 $old Original node 2 $new new node Index of methods by name "addConditions($node, @conditions)" "after($node, $re)" "at()" "attr :lvalue($node, $attribute)" "before($node, $re)" "by($node, $sub, @context)" "c($node, $tag, $position)" "cdata()" "change($node, $name, @tags)" "changeAttr($node, $old, $new)" "changeAttrValue($node, $old, $oldValue, $new, $newValue)" "contentAsTags($node)" "contentBefore($node)" "contentBeforeAsTags($node)" "contentBeyond($node)" "contentBeyondAsTags($node)" "contents($node)" "context($node)" "cut($node)" "deleteAttr($node, $attr, $value)" "deleteConditions($node, @conditions)" "first($node)" "get($node, @position)" "index($node)" "isFirst($node)" "isLast($node)" "isOnlyChild($node)" "isText($node)" "last($node)" "listConditions($node)" "new()" "next($node)" "over($node, $re)" "position($node)" "prev($node)" "putFirst($old, $new)" "putLast($old, $new)" "putNext($old, $new)" "putPrev($old, $new)" "renameAttr($node, $old, $new)" "renameAttrValue($node, $old, $oldValue, $new, $newValue)" "replaceWith($old, $new)" "setAttr($node, %values)" "string($node)" "stringWithCondition($node, @conditions)" "unwrap($node)" "up($node, @tags)" "wrapContentWith($old, $tag)" "wrapWith($old, $tag)" Installation This module is written in 100% Pure Perl and is thus easy to read, modify and install. Standard Module::Build process for building and installing modules: perl Build.PL ./Build ./Build test ./Build install Author philiprbrenan@gmail.com http://www.appaapps.com Copyright Copyright (c) 2016 Philip R Brenan. This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.