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: Parameter Description inputString => string of xml to be parsed inputFile => file of xml to be parsed name => symbolic name for this parse used in messages about this parse and to name output files generated by this parse output => directory into which to write output files errors => 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 newText() Create a new text node which can then be inserted into a parse tree Parameter Description 1 $tree Parse tree in which to create the new text node 2 $text Text of the new node newTag() Create a new non text node which can then be inserted into a parse tree Parameter Description 1 $tree Parse tree in which to create the new node 2 $tag Tag for the new node 3 %attributes attributes for the node Data::Edit::Xml::newTree() Create a new non text root node to create a new parse tree into which other nodes can be inserted Parameter Description 1 $tag Tag for the new node 2 %attributes attributes for the node 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 contentString($node) Build a string from the contents of a node Parameter Description 1 $node Start node prettyString($node) Build a readable, prettified string from a node of a parse tree and the nodes below it Parameter Description 1 $node Start node PrettyContentString($node) Build a readable, prettified string from the content of a node 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 attrs($node, @attributes) Get the value of zero or more attributes Parameter Description 1 $node Node in parse tree 2 @attribute attribute names whose values are to be retrieved attrCount($node) Get the number of attributes for a node Parameter Description 1 $node Node in parse tree 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 firstOf($node, @tags) Get the first node below this node Parameter Description 1 $node Node 2 @tags The tags for the nodes under this node for which we want the first elements 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 isEmpty($node) Check whether the node is empty Parameter Description 1 $node Start 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 Parameter Description 1 $node Starting node 2 $sub sub to call for each sub node 3 @context accumulated context down($node, $sub, @context) Pre-order traversal down through a parse tree or sub tree 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 deleteAttrs($node, @attrs) Delete the named attributes if present, without checking their values first Parameter Description 1 $node Node 2 @attr Attributes to delete 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 wrapUp($node, @tags) Wrap the original node in a sequence of new nodes forcing the original node down deepening the parse tree Parameter Description 1 $old Node 2 @tags Tags to wrap the node with - with the uppermost tag rightmost 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)" "attrCount($node)" "attrs($node, @attributes)" "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)" "contentString($node)" "context($node)" "cut($node)" "deleteAttr($node, $attr, $value)" "deleteAttrs($node, @attr)" "deleteConditions($node, @conditions)" "first($node)" "firstOf($node, @tags)" "get($node, @position)" "index($node)" "isEmpty($node)" "isFirst($node)" "isLast($node)" "isOnlyChild($node)" "isText($node)" "last($node)" "listConditions($node)" "new()" "newTag()" "newText()" "Data::Edit::Xml::newTree()" "next($node)" "over($node, $re)" "position($node)" "prev($node)" "PrettyContentString($node)" "prettyString($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)" "wrapUp($old, @tags)" "wrapWith($old, $tag)" Installation This module is written in 100% Pure Perl and is thus easy to read, use, 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-2017 Philip R Brenan. This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.