DOM でXML 作成 (Libxml2)
DOMでXMLファイル書き出す。xmlNewDoc()でDOMの雛形をつくる。xmlNewNode()でノードを作成して、ルートノードからくっつけていく。
#include <stdio.h> #include <libxml/tree.h> #include <libxml/parser.h> xmlNodePtr add_node(xmlNodePtr node, char *node_name, char *text, char *attr, char *attr_var) { xmlNodePtr new_node = NULL; xmlNodePtr new_text = NULL; /* Create node */ new_node = xmlNewNode(NULL, node_name); /* Create text */ if (NULL != text) { new_text = xmlNewText(text); xmlAddChild(new_node, new_text); } /* Set attribute */ if (NULL != attr) { xmlNewProp(new_node, attr, attr_var); } /* Add node */ xmlAddChild(node, new_node); return new_node; } int main(int argc, char **argv) { xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr new_node = NULL; char *output_file; int ret; if (argc != 2) { return 1; } output_file = argv[1]; LIBXML_TEST_VERSION; /* Create new document */ doc = xmlNewDoc("1.0"); /* Add root element */ root_node = xmlNewNode(NULL, "cars"); xmlDocSetRootElement(doc, root_node); /* Add node to root */ new_node = add_node(root_node, "company", NULL, "name", "Car City Co., Ltd."); /* Add node to node1 */ add_node(new_node, "product", "sports car", "ID", "001"); add_node(new_node, "product", "motorcycle", "ID", "002"); /* Add node to root */ add_node(root_node, "company", NULL, "name", "Car Bank Co., Ltd."); /* Write document */ ret = xmlSaveFormatFileEnc(output_file, doc, "UTF-8", 1); if (ret < 0) { fprintf(stderr, "Failed to save %s\n", output_file); return 1; } /* Free document */ xmlFreeDoc(doc); xmlCleanupParser(); return 0; }
XML出力
<?xml version="1.0" encoding="UTF-8"?> <cars> <company name="Car City Co., Ltd."> <product ID="001">sports car</product> <product ID="002">motorcycle</product> </company> <company name="Car Bank Co., Ltd."/> </cars>
参考
The XML C parser and toolkit of Gnome
やさしいXML 第3版
- 作者: 高橋麻奈
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2009/04/21
- メディア: 単行本
- 購入: 1人 クリック: 101回
- この商品を含むブログ (15件) を見る