xml
Toto je starší verze dokumentu!
XML
- XML
- každé XML má kořen - tj. hlavní element
- element je ohraničen startovací a ukončovací značkou
- například:
<element1>..</element1>- neprázdný element s názvem element1 - například:
<element1/>- prázdný element s názvem element1
- element může mít atributy
- například:
<element1 atr1='hodnota' atr2=\'hodnota2'>..</element1>
- element může mít i návěští
- například:
<namespace1:element1/>
- jako uzel se označuje element nebo hodnota elementu
- existuje více způsobů jak s XML pracovat, nejčastěji:
- pomocí parseru
- DOM (DOM = Document Object Model) - z XML vyrobí obraz (strom) v paměti.
- SAX (SAX = Simple API for XML) - postupně prochází XML a vyvolává události (uživatelské callback).
- pomocí xpath - vyhledání elementů výrazem
- přímé procházení voláním funkcí (tj. dej další uzel, dej potomky, .. )
libXML2
- podporuje SAX i Xpath
- měl jsem ale případ XML, kde mi ani jedno řešení nepřišlo vhodné
- použil jsem přímé procházení, viz následující příklad
<configuration> <timestamp>2016-04-01 10:00</timestamp> <methods> .. </methods> <syssettings> .. </syssettings> </configuration>
void parseCfg(xmlDocPtr doc, xmlNodePtr cur) { xmlChar *key; cur = cur->xmlChildrenNode; while (cur != NULL) { if (cur->type == XML_ELEMENT_NODE) { if ((!xmlStrcmp(cur->name, (const xmlChar *)"timestamp"))) { key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); xmlFree(key); } if ((!xmlStrcmp(cur->name, (const xmlChar *)"methods"))) { parseMet(doc, cur->xmlChildrenNode); } if ((!xmlStrcmp(cur->name, (const xmlChar *)"syssettings"))) { parsePref(doc, cur->xmlChildrenNode); } } cur = cur->next; } return; } int parseXmlBuf(const char *buf, int size) { xmlDocPtr doc; xmlNodePtr cur; doc = xmlParseMemory(buf,size); if (doc == NULL ) { return 1; } cur = xmlDocGetRootElement(doc); if (cur == NULL) { xmlFreeDoc(doc); return 2; } // check if the buf is XML configuration (root equal to configuration} if (xmlStrcmp(cur->name, (const xmlChar *) "configuration")) { xmlFreeDoc(doc); return 3; } parseCfg(doc, cur); xmlFreeDoc(doc); return 0; }
xml.1460538534.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

