#
# Utility Functions to output XML
#
#
xml_escape () {
local res="$2"
res=${res/\&/\&}
res=${res/\"/\"}
res=${res/\'/\'}
res=${res/\</\<}
res=${res/\>/\>}
eval "${1}=\"${res}\""
}
# Outputs the xml declaration
#
# <?xml version='1.0'?>
#
xml_declaration () {
echo "<?xml version='1.0'?>"
}
# Outputs the given xml element:
#
# xml_element "element" ["attr1" "v1" "attr2 "v2"... ] ["data"]
#
# <element attr1="v1" attr2="v2">data</element>
# or
# <element attr1="v1" attr2="v2"/>
#
xml_element () {
local tag=${1:?"missing element name parameter to '${FUNCNAME}'"}
local data=""
local val=""
local count=1
for i in "$@" ; do
if [ ${count} = 1 ]; then
xml_escape "tag" "${i}"
printf "<${tag}"
elif [ $((count % 2)) -eq 0 ]; then
xml_escape "data" "${i}"
else
xml_escape "val" "${i}"
printf " ${data}=\"${val}\""
data=""
fi
let ++count
done
if [ ! -z "${data}" ]; then
printf ">${data}</${tag}>\n"
else
printf "/>\n"
fi
return 0
}
# Starts the given xml element:
#
# start_xml_element "element" ["attr1" "v1" "attr2 "v2"... ]
#
# <element attr1="v1" attr2="v2">
#
start_xml_element () {
local tag=${1:?"missing element name parameter to '${FUNCNAME}'"}
local data=""
local val=""
local count=1
for i in "$@" ; do
if [ ${count} = 1 ]; then
xml_escape "tag" "${i}"
printf "<${tag}"
elif [ $((count % 2)) -eq 0 ]; then
xml_escape "data" "${i}"
else
xml_escape "val" "${i}"
printf " ${data}=\"${val}\""
data=""
fi
let ++count
done
if [ ! -z "${data}" ]; then
echo "ERROR: missing value for attribute ${data}"
return -1
fi
printf ">\n"
return 0
}
# Closes the given xml element:
#
# close_xml_element "foo"
#
# <foo/>
#
close_xml_element () {
local tag=${1:?"missing element name parameter to '${FUNCNAME}'"}
xml_escape "tag" "${tag}"
printf "</${tag}>\n"
}
# ex:ts=4:et: