xref: /aosp_15_r20/external/dynamic_depth/internal/xmpmeta/xml/utils.h (revision a62be0856e8e1158f43b03e41bbad10f4d005fde)
1*a62be085SSadaf Ebrahimi #ifndef DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_UTILS_H_  // NOLINT
2*a62be085SSadaf Ebrahimi #define DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_UTILS_H_  // NOLINT
3*a62be085SSadaf Ebrahimi 
4*a62be085SSadaf Ebrahimi #include <libxml/tree.h>
5*a62be085SSadaf Ebrahimi 
6*a62be085SSadaf Ebrahimi #include <string>
7*a62be085SSadaf Ebrahimi 
8*a62be085SSadaf Ebrahimi #include "base/port.h"
9*a62be085SSadaf Ebrahimi 
10*a62be085SSadaf Ebrahimi namespace dynamic_depth {
11*a62be085SSadaf Ebrahimi namespace xmpmeta {
12*a62be085SSadaf Ebrahimi namespace xml {
13*a62be085SSadaf Ebrahimi 
14*a62be085SSadaf Ebrahimi // Convenience function to convert an xmlChar* to a char*
FromXmlChar(const xmlChar * in)15*a62be085SSadaf Ebrahimi inline const char* FromXmlChar(const xmlChar* in) {
16*a62be085SSadaf Ebrahimi   return reinterpret_cast<const char*>(in);
17*a62be085SSadaf Ebrahimi }
18*a62be085SSadaf Ebrahimi 
19*a62be085SSadaf Ebrahimi // Convenience function to convert a char* to an xmlChar*.
ToXmlChar(const char * in)20*a62be085SSadaf Ebrahimi inline const xmlChar* ToXmlChar(const char* in) {
21*a62be085SSadaf Ebrahimi   return reinterpret_cast<const xmlChar*>(in);
22*a62be085SSadaf Ebrahimi }
23*a62be085SSadaf Ebrahimi 
24*a62be085SSadaf Ebrahimi // Returns the first rdf:Description node; null if not found.
25*a62be085SSadaf Ebrahimi xmlNodePtr GetFirstDescriptionElement(xmlDocPtr parent);
26*a62be085SSadaf Ebrahimi 
27*a62be085SSadaf Ebrahimi // Returns the first rdf:Seq element found in the XML document.
28*a62be085SSadaf Ebrahimi xmlNodePtr GetFirstSeqElement(xmlDocPtr parent);
29*a62be085SSadaf Ebrahimi 
30*a62be085SSadaf Ebrahimi // Returns the first rdf:Seq element found in the given node.
31*a62be085SSadaf Ebrahimi // Returns {@code parent} if that is itself an rdf:Seq node.
32*a62be085SSadaf Ebrahimi xmlNodePtr GetFirstSeqElement(xmlNodePtr parent);
33*a62be085SSadaf Ebrahimi 
34*a62be085SSadaf Ebrahimi // Returns the ith (zero-indexed) rdf:li node in the given rdf:Seq node.
35*a62be085SSadaf Ebrahimi // Returns null if either of {@code index} < 0, {@code node} is null, or is
36*a62be085SSadaf Ebrahimi // not an rdf:Seq node.
37*a62be085SSadaf Ebrahimi xmlNodePtr GetElementAt(xmlNodePtr node, int index);
38*a62be085SSadaf Ebrahimi 
39*a62be085SSadaf Ebrahimi // Returns the value in an rdf:li node. This is for a node whose value
40*a62be085SSadaf Ebrahimi // does not have a name, e.g. <rdf:li>value</rdf:li>.
41*a62be085SSadaf Ebrahimi // If the given rdf:li node has a nested node, it returns the string
42*a62be085SSadaf Ebrahimi // representation of the contents of those nodes, which replaces the XML
43*a62be085SSadaf Ebrahimi // tags with one whitespace character for each tag character.
44*a62be085SSadaf Ebrahimi // This is treated as undefined behavior; it is the caller's responsibility
45*a62be085SSadaf Ebrahimi // to remove any whitespace and newlines.
46*a62be085SSadaf Ebrahimi const string GetLiNodeContent(xmlNodePtr node);
47*a62be085SSadaf Ebrahimi 
48*a62be085SSadaf Ebrahimi // Returns the given XML doc serialized to a string.
49*a62be085SSadaf Ebrahimi // For debugging purposes.
50*a62be085SSadaf Ebrahimi const string XmlDocToString(const xmlDocPtr doc);
51*a62be085SSadaf Ebrahimi 
52*a62be085SSadaf Ebrahimi }  // namespace xml
53*a62be085SSadaf Ebrahimi }  // namespace xmpmeta
54*a62be085SSadaf Ebrahimi }  // namespace dynamic_depth
55*a62be085SSadaf Ebrahimi 
56*a62be085SSadaf Ebrahimi #endif // DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_UTILS_H_  // NOLINT
57