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