X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=utils%2Fxmlgrep%2FREADME;h=33294ffbd19c639ade5cfd71396839fe802c2e64;hb=a89a28c4e62a63e05b6b889274fa848ea2bda007;hp=29be06bb32e79ea88982c47c95a65f997b38e501;hpb=64a07de08039a5316105656ec73faf63df8ed4ab;p=flightgear.git diff --git a/utils/xmlgrep/README b/utils/xmlgrep/README index 29be06bb3..33294ffbd 100644 --- a/utils/xmlgrep/README +++ b/utils/xmlgrep/README @@ -1,62 +1,146 @@ +This library is specially designed for reading xml configuration files and +to be as low on memory management as possible. Modifying or writing xml files +is not planned for the future. In most situations being able to gather data +by reading an xml file is more than enough and the read-only decision +provides a number of advantages over a one-size fits all approach. For isntance +the memory footprint can be kept low and the library can be kept simple. + +To achieve these goals the mmap function is used to map the configuration file +to a memory region. The only places where memory is allocated is when creating +a new XML-id, when requesting a string from a node, when requestiong the node +name or when a request is made to copy a node into a new memory region. + +Using this library should be pretty simple for most tasks; just open a file, +read every parameter one by one and close the id again. +{ + void *xid; + + xid = xmlOpen("/tmp/file.xml"); + xpos = xmlNodeGetDouble(xid, "/configuration/x-pos"); + ypos = xmlNodeGetDouble(xid, "/configuration/y-pos"); + zpos = xmlNodeGetDouble(xid, "/configuration/z-pos"); + xmlClose(xid); +} + +While it is certainly possible to access every node directly by calling the +xmlNodeGet(Int/Double/String) functions, when more than one node need to be +gathered from a parent node it is advised to get the id of the parent node +and work from there since the XML-id holds the boundaries of the (parent)node +which limits the searching area resulting in improved searching speed. +{ + void *xnid; + char *s; + + xnid = xmlNodeGet(id, "/configuration/setup/"); + version = xmlNodeGetDouble(xnid, "version"); + s = xmlNodeGetString(xnid, "author"); + if (s) author = s; + free(s); + free(xnid); +} + +Overview of the available functions: + ----------------------------------------------------------------------------- # # Functions to Open and Close the XML file # e.g. # id = xmlOpen("/tmp/file.xml"); # xmlClose(id); # -void *xmlOpen(const char *); -void xmlClose(const void *); +void *xmlOpen(const char *filename); +void *xmlInitBuffer(const char *buffer, size_t size); +void xmlClose(void *xid); # # Get the Id of a node at the specified path # e.g. -# xnid = xmlGetNode(id, "/path/to/specified/node"); +# xnid = xmlNodeGet(id, "/path/to/specified/node"); # -void *xmlGetNode(const void *, const char *); -void *xmlCopyNode(void *, const char *); +void *xmlNodeGet(const void *xid, const char *path); +void *xmlNodeCopy(const void *xid, const char *path); # -# Functions to walk the node tree an process them one by one. +# Functions to walk the node tree and process them one by one. # e.g. # xmid = xmlMarkId(id); -# num = xmlGetNumElements(xmid); +# num = xmlNodeGetNum(xmid, "node"); # for (i=0; i