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.