-// pattern <on character or -AB[CD]
-const char *code_value_extract(const char *name, char tag_buffer[5]) {
- size_t length = strlen(name);
- if (length == 1 ) {
- return name;
- }
- if (length > 2 && length < 5) {
- if (name[0] != '-') {
- return 0;
- }
- length--;
- const char *ptr = name+1;
- int index = 0;
- for (index = 0; index < length/2; index++) {
- unsigned int value;
- char temp[3];
- strncpy(temp, ptr + 2*index, 2);
- sscanf(temp, "%02X", &value);
- tag_buffer[index] = (unsigned char) value;
- }
- tag_buffer[index] = '\0';
- if (index > 0)
- return tag_buffer;
- }
- return 0;
+// Given a xmlNode ptr, extract a value from either a element name or from a given attribute
+char *element_attribute_value_extract(const xmlNode *ptr,
+ const char *attribute_name,
+ NMEM nmem)
+{
+ const char *name = (const char *) ptr->name;
+ size_t length = strlen(name);
+ xmlAttr *attr;
+ if (length > 1 )
+ return nmem_strdup(nmem, name+1);
+ // TODO Extract from attribute where matches attribute_name
+ for (attr = ptr->properties; attr; attr = attr->next)
+ if (!strcmp((const char *)attr->name, attribute_name))
+ return nmem_text_node_cdata(attr->children, nmem);
+ return 0;