return ok;
}
+const gchar* obt_xml_file_path(ObtXmlInst *inst)
+{
+ return inst->path;
+}
+
void obt_xml_close(ObtXmlInst *i)
{
if (i && i->doc) {
obt_xml_tree(i, i->root->children);
}
+guint obt_xml_node_line(xmlNodePtr node)
+{
+ return XML_GET_LINE(node);
+}
+
gchar *obt_xml_node_string(xmlNodePtr node)
{
- xmlChar *c = xmlNodeGetContent(node);
+ xmlChar *c;
gchar *s;
+ c = xmlNodeIsText(node->children) ? xmlNodeGetContent(node) : NULL;
if (c) g_strstrip((char*)c); /* strip leading/trailing whitespace */
s = g_strdup(c ? (gchar*)c : "");
xmlFree(c);
return s;
}
+gchar *obt_xml_node_string_raw(xmlNodePtr node)
+{
+ xmlChar *c;
+ gchar *s;
+ c = xmlNodeIsText(node->children) ? xmlNodeGetContent(node) : NULL;
+ s = g_strdup(c ? (gchar*)c : "");
+ xmlFree(c);
+ return s;
+}
+
gint obt_xml_node_int(xmlNodePtr node)
{
- xmlChar *c = xmlNodeGetContent(node);
+ xmlChar *c;
gint i;
+ c = xmlNodeIsText(node->children) ? xmlNodeGetContent(node) : NULL;
if (c) g_strstrip((char*)c); /* strip leading/trailing whitespace */
i = c ? atoi((gchar*)c) : 0;
xmlFree(c);
gboolean obt_xml_node_bool(xmlNodePtr node)
{
- xmlChar *c = xmlNodeGetContent(node);
+ xmlChar *c;
gboolean b = FALSE;
+ c = xmlNodeIsText(node->children) ? xmlNodeGetContent(node) : NULL;
if (c) g_strstrip((char*)c); /* strip leading/trailing whitespace */
if (c && !xmlStrcasecmp(c, (const xmlChar*) "true"))
b = TRUE;
gboolean obt_xml_node_contains(xmlNodePtr node, const gchar *val)
{
- xmlChar *c = xmlNodeGetContent(node);
+ xmlChar *c;
gboolean r;
+ c = xmlNodeIsText(node->children) ? xmlNodeGetContent(node) : NULL;
if (c) g_strstrip((char*)c); /* strip leading/trailing whitespace */
r = !xmlStrcasecmp(c, (const xmlChar*) val);
xmlFree(c);
xmlDocPtr obt_xml_doc(ObtXmlInst *inst);
xmlNodePtr obt_xml_root(ObtXmlInst *inst);
+/*! Returns the path to the file loaded by @inst, if one exists, or NULL.
+ The returned string is owned by @inst and will be freed along with it.
+ */
+const gchar* obt_xml_file_path(ObtXmlInst *inst);
+
void obt_xml_close(ObtXmlInst *inst);
void obt_xml_register(ObtXmlInst *inst, const gchar *tag,
xmlNodePtr obt_xml_find_sibling(xmlNodePtr node, const gchar *name);
+guint obt_xml_node_line (xmlNodePtr node);
gboolean obt_xml_node_contains (xmlNodePtr node, const gchar *val);
-gchar *obt_xml_node_string (xmlNodePtr node);
+gchar *obt_xml_node_string (xmlNodePtr node); /* strips whitespace */
+gchar *obt_xml_node_string_raw(xmlNodePtr node); /* unstripped version */
gint obt_xml_node_int (xmlNodePtr node);
gboolean obt_xml_node_bool (xmlNodePtr node);