1*a62be085SSadaf Ebrahimi #ifndef DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_SEARCH_H_ // NOLINT 2*a62be085SSadaf Ebrahimi #define DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_SEARCH_H_ // NOLINT 3*a62be085SSadaf Ebrahimi 4*a62be085SSadaf Ebrahimi #include <libxml/tree.h> 5*a62be085SSadaf Ebrahimi 6*a62be085SSadaf Ebrahimi // Performs searches an XML tree. 7*a62be085SSadaf Ebrahimi namespace dynamic_depth { 8*a62be085SSadaf Ebrahimi namespace xmpmeta { 9*a62be085SSadaf Ebrahimi namespace xml { 10*a62be085SSadaf Ebrahimi 11*a62be085SSadaf Ebrahimi // Depth-first search on the nodes in this XML doc. 12*a62be085SSadaf Ebrahimi // Performs Depth first search on the child XML elements in order. 13*a62be085SSadaf Ebrahimi // Returns the first child element with a matching node name. If not found, 14*a62be085SSadaf Ebrahimi // returns a null pointer. 15*a62be085SSadaf Ebrahimi xmlNodePtr DepthFirstSearch(const xmlDocPtr parent, const char* name); 16*a62be085SSadaf Ebrahimi 17*a62be085SSadaf Ebrahimi // Returns the first child element with a matching prefix and name. 18*a62be085SSadaf Ebrahimi // If prefix is null or empty, this has the same effect as the method abouve. 19*a62be085SSadaf Ebrahimi // Otherwise, the resulting node's namespace and its name must not be null. 20*a62be085SSadaf Ebrahimi xmlNodePtr DepthFirstSearch(const xmlDocPtr parent, const char* prefix, 21*a62be085SSadaf Ebrahimi const char* name); 22*a62be085SSadaf Ebrahimi 23*a62be085SSadaf Ebrahimi // Depth-first search on the parent, for a child element with the given name. 24*a62be085SSadaf Ebrahimi // The element name excludes its prefix. 25*a62be085SSadaf Ebrahimi // Returns a null pointer if no matching element is found. 26*a62be085SSadaf Ebrahimi xmlNodePtr DepthFirstSearch(const xmlNodePtr parent, const char* name); 27*a62be085SSadaf Ebrahimi 28*a62be085SSadaf Ebrahimi // Returns the first child element with a matching prefix and name. 29*a62be085SSadaf Ebrahimi // If prefix is null or empty, this has the same effect as the method abouve. 30*a62be085SSadaf Ebrahimi // Otherwise, the resulting node's namespace and its name must not be null. 31*a62be085SSadaf Ebrahimi xmlNodePtr DepthFirstSearch(const xmlNodePtr parent, const char* prefix, 32*a62be085SSadaf Ebrahimi const char* name); 33*a62be085SSadaf Ebrahimi 34*a62be085SSadaf Ebrahimi } // namespace xml 35*a62be085SSadaf Ebrahimi } // namespace xmpmeta 36*a62be085SSadaf Ebrahimi } // namespace dynamic_depth 37*a62be085SSadaf Ebrahimi 38*a62be085SSadaf Ebrahimi #endif // DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_SEARCH_H_ // NOLINT 39