Customize reports with XML tool

From Gramps
Jump to: navigation, search

🚧 Work In Progress

This wikipage is an outline from a template being roughed in. Please don't edit just yet. Instead, contribute suggestions on the Discussion page.

This page is not planned be linked to a public page until about 2 weeks after 26 March 2021.

If this notice remains after that date, please feel welcome to remove this notice and consider the content 'fair game' for unlimited editing.

Families often have complicated structures, especially for Twenty-first century blended families. Generating reports that include the various relatives will yield a more complete picture of the family.

This article offers a less manual method to configure a Report's options as an alternative to the Gramps report interface.

Family Lines Graph

Creating a Family Lines Graph often involves carefully selecting multiple people to include, this is a slow process that recursively loads the Select Person dialog.

Gramps stores these selections in a file named report_options.xml in the ~/.gramps User directory. The report options are overwritten every time a graphical report is created.

It is possible to edit this file manually with a text editor, but that is a tedious and error-prone procedure.

Create a Bash script

The following bash script will take care of the process for Linux users. It includes backing up the current file and saving the list of Person IDs in a file that can be reused.

if [ $# -lt 1 ];then
    echo "Utility to replace list of People of Interest in Gramps Family Lines Graph."
    echo "The file 'report_options.xml' is overwritten after making a backup."
    echo "The current list of People of Interest is saved for possible reuse" 
    echo "Usage: "$0" current_pid [new_pid]"
    echo "   current_pid is the file name in which to save current pid list"
    echo "   Optional. If present, new_pid is the name of the file containing"
    echo "   the new pid list"
    echo "   eg " $0""
    exit 1

#echo "gramps_home = "$gramps_home
#echo "opts = "$opts
#echo "bak = "$bak

echo "Backing up "$opts " to " $bak 
cp -irp $opts $bak

echo "Saving current pid list to "$gramps_home$1
lxprintf -e 'module[@name="familylines_graph"]/option[@name="gidlist"]'\
 "%s\n" @value $opts > $gramps_home$1

echo "Replacing pids in "$opts
echo "    with the contents of "$gramps_home$2

# replacing the xml in situ does not seem to work correctly
# instead send it to a temporary file and copy
lxreplace -q \
  'module[@name="familylines_graph"]/option[@name="gidlist"]' \
  -@ '"value"' "'`cat $gramps_home$2`'" \
  ~/.gramps/report_options.xml > /tmp/temp.xml

cp -fv /tmp/temp.xml $opts 2>>/dev/null
echo "Updated "$opts

Using the script

Copy the this code into a file, or get the most recent version of the script from github, and save it to a directory on your PATH.

You will also need the LTXML2 Toolkit from the Language Technology Group at Edinburgh University.

See also