Move xml_add utilities to xml_add.c source
[yaz-moved-to-github.git] / src / xml_add.c
1 /* This file is part of the YAZ toolkit.
2  * Copyright (C) 1995-2013 Index Data
3  * See the file LICENSE for details.
4  */
5 /**
6  * \file xml_add.c
7  * \brief XML node creation utilities
8  */
9 #if HAVE_CONFIG_H
10 #include <config.h>
11 #endif
12
13 #include <stdlib.h>
14
15 #include <yaz/srw.h>
16 #include <yaz/wrbuf.h>
17 #if YAZ_HAVE_XML2
18 #include <libxml/parser.h>
19 #include <libxml/tree.h>
20 #include "sru-p.h"
21
22 void add_XML_n(xmlNodePtr ptr, const char *elem, char *val, int len,
23                xmlNsPtr ns_ptr)
24 {
25     if (val)
26     {
27         xmlDocPtr doc = xmlParseMemory(val,len);
28         if (doc)
29         {
30             xmlNodePtr c = xmlNewChild(ptr, ns_ptr, BAD_CAST elem, 0);
31             xmlNodePtr t = xmlDocGetRootElement(doc);
32             xmlAddChild(c, xmlCopyNode(t,1));
33             xmlFreeDoc(doc);
34         }
35     }
36 }
37
38 xmlNodePtr add_xsd_string_n(xmlNodePtr ptr, const char *elem, const char *val,
39                             int len)
40 {
41     if (val)
42     {
43         xmlNodePtr c = xmlNewChild(ptr, 0, BAD_CAST elem, 0);
44         xmlNodePtr t = xmlNewTextLen(BAD_CAST val, len);
45         xmlAddChild(c, t);
46         return t;
47     }
48     return 0;
49 }
50
51 xmlNodePtr add_xsd_string_ns(xmlNodePtr ptr, const char *elem, const char *val,
52                              xmlNsPtr ns_ptr)
53 {
54     if (val)
55     {
56         xmlNodePtr c = xmlNewChild(ptr, ns_ptr, BAD_CAST elem, 0);
57         xmlNodePtr t = xmlNewText(BAD_CAST val);
58         xmlAddChild(c, t);
59         return t;
60     }
61     return 0;
62 }
63
64 xmlNodePtr add_xsd_string(xmlNodePtr ptr, const char *elem, const char *val)
65 {
66     return add_xsd_string_ns(ptr, elem, val, 0);
67 }
68
69 void add_xsd_integer(xmlNodePtr ptr, const char *elem,
70                             const Odr_int *val)
71 {
72     if (val)
73     {
74         char str[40];
75         sprintf(str, ODR_INT_PRINTF, *val);
76         xmlNewTextChild(ptr, 0, BAD_CAST elem, BAD_CAST str);
77     }
78 }
79
80 #endif
81
82 /*
83  * Local variables:
84  * c-basic-offset: 4
85  * c-file-style: "Stroustrup"
86  * indent-tabs-mode: nil
87  * End:
88  * vim: shiftwidth=4 tabstop=8 expandtab
89  */
90