# # Utility Functions to output XML # # xml_escape () { local res="$2" res=${res/\&/\&} res=${res/\"/\"} res=${res/\'/\'} res=${res/\/\>} eval "${1}=\"${res}\"" } # Outputs the xml declaration # # # xml_declaration () { echo "" } # Outputs the given xml element: # # xml_element "element" ["attr1" "v1" "attr2 "v2"... ] ["data"] # # data # or # # 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}\n" else printf "/>\n" fi return 0 } # Starts the given xml element: # # start_xml_element "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" # # # close_xml_element () { local tag=${1:?"missing element name parameter to '${FUNCNAME}'"} xml_escape "tag" "${tag}" printf "\n" } # ex:ts=4:et: