#!/usr/bin/awk -f # cdata.awk version 2 by Ben Collver # # reads XML from stdin and prints to stdout, replacing CDATA # with hexBinary data when the CDATA contains angle brackets. # # OLD: ]]> # NEW: 3C4142433E function hex_print(str, count, i, tokens) { count = split(str, tokens, "") for (i = 1; i <= count; i++) { printf("%02X", hex_encode_ord[tokens[i]]) } return } function hex_init( i, c) { for (i = 0; i <= 255; i++) { c = sprintf("%c", i) hex_encode_ord[c] = i } return } function inject_ns(str) { if (match(str, /^<\?xml[^?>]*\?>/)) { retval = substr(str, 1, RLENGTH) "\n" \ "" \ substr(str, RLENGTH+1) } else { retval = str } return retval } BEGIN { RS = "]]>" hex_init() } match($0, /]/) { printf "" hex_print(str) printf "" } else { printf "", str } next } { printf "%s", $0 }