int main( int argc, char **argv ) { FILE *fp = 0; if( argc < 2 ) { fprintf( stderr, "Usage : %s filename.\n", argv[0] ); exit( -1 ); } fp = fopen( argv[1], "r" ); if( fp == 0 ) { fprintf( stderr, "Unable to open %s.\n", argv[1] ); exit( -1 ); } { struct xmlDocument *doc = xmldoc_new( fp ); xml_seterrorfn( error_log ); xml_parse( doc ); dump_node( doc->root ); xmldoc_free( doc ); } fclose( fp ); return 0; }
int SongMetaData_parse_DIDL(struct SongMetaData *object, const char *xml) { struct xmldoc *doc = xmldoc_parsexml(xml); if (doc == NULL) return 0; // ... did I mention that I hate navigating XML documents ? struct xmlelement *didl_node = find_element_in_doc(doc, "DIDL-Lite"); if (didl_node == NULL) return 0; struct xmlelement *item_node = find_element_in_element(didl_node, "item"); if (item_node == NULL) return 0; struct xmlelement *value_node = NULL; value_node = find_element_in_element(item_node, "dc:title"); if (value_node) object->title = get_node_value(value_node); value_node = find_element_in_element(item_node, "upnp:artist"); if (value_node) object->artist = get_node_value(value_node); value_node = find_element_in_element(item_node, "upnp:album"); if (value_node) object->album = get_node_value(value_node); value_node = find_element_in_element(item_node, "upnp:genre"); if (value_node) object->genre = get_node_value(value_node); xmldoc_free(doc); return 1; }
char *upnp_create_device_desc(struct upnp_device_descriptor *device_def) { char *result = NULL; struct xmldoc *doc; doc = generate_desc(device_def); if (doc != NULL) { result = xmldoc_tostring(doc); xmldoc_free(doc); } return result; }
char * output_get_grouprole(void) { char *grouprole = NULL; struct xmldoc *doc = xmldoc_fromdoc(RENDERXML); if(doc){ struct xmlelement *render_node = find_element_in_doc(doc, "Gmediarender"); struct xmlelement *group_node = find_element_in_element(render_node, "Group"); struct xmlelement *value_node = find_element_in_element(group_node, "GroupRole"); grouprole = get_node_value(value_node); xmldoc_free(doc); } return grouprole; }
int output_set_grouprole(const char*grouprole) { int ret = -1; struct xmldoc *doc = xmldoc_fromdoc(RENDERXML); char *xmlstring; if(doc){ struct xmlelement *render_node = find_element_in_doc(doc, "Gmediarender"); struct xmlelement *group_node = find_element_in_element(render_node, "Group"); struct xmlelement *value_node = find_element_in_element(group_node, "GroupRole"); if(value_node) ret = set_node_value(value_node, grouprole); xmlstring = xmldoc_tostring(doc); xmlstringtofile(RENDERXML, xmlstring); xmldoc_free(doc); free(xmlstring); } return ret; }