Libxml2

Streaming API で XMLの読み出し

Libxml2 の Streaming API っていうのは、 XML を頭から解析するときに役立つ API。SAXと違ってハンドラを登録する必要がないから楽。 #include <stdio.h> #include <libxml/tree.h> #include <libxml/xmlreader.h> void processNode(xmlTextReaderPtr reader) { const xmlChar *name; const xmlChar *val</libxml/xmlreader.h></libxml/tree.h></stdio.h>…

Writing API で XMLの書き出し

Libxml2 の Writing API っていうのは、 XML を頭から出力するときに役立つ API。 #include <stdio.h> #include <string.h> #include <libxml/encoding.h> #include <libxml/xmlwriter.h> #define MY_ENCODING "UTF-8" /*****************************************************************************************/ /*</libxml/xmlwriter.h></libxml/encoding.h></string.h></stdio.h>…

属性の削除

xmlHasPropで属性を持っているか確認しあと、xmlRemovePropでその属性を削除。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int del_attribute(xmlNodeSetPtr nodes) { xmlAttrPtr attr; int size; int i; size = (nodes) ? nodes->nodeNr : 0; for(</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

ノードの削除

xmlUnlinkNodeでノードを切り話したあと、xmlFreeで削除する。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int del_node(xmlNodeSetPtr nodes) { int size; int i; size = (nodes) ? nodes->nodeNr : 0; for(i = 0; i < nodes->nodeNr; ++i) { xmlU</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

属性の追加

xmlNewPropで属性を追加できる。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int add_attribute(xmlNodeSetPtr nodes) { int size; int i; size = (nodes) ? nodes->nodeNr : 0; for(i = 0; i < nodes->nodeNr; ++i) { xmlNewProp(nodes->nodeTab[i</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

テキストの追加

テキストを追加するには、ノードを追加するのと同じようにxmlNewNodeでノードを作って、xmlAddChildで親にくっつればいい。テキストもツリーの一部に過ぎないので。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int add_text(xmlNodeSetPtr nodes) {</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

ノードの追加

ノードを追加するには、xmlNewNodeでノードを作って、xmlAddChildで親にくっつればいい。以下、XPathでノードを検索して、そのノードの下に新しいノードをくっけている。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int add_node(xmlNodeSetPtr nod</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

Libxml2 で XPath

xmlXPathEvalExpression()でXPathに一致したノードのリストを取得できる。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> void trim(char *str) { int i; for (i = strlen(str) - 1; 0 <= i; i--) { if ((str[i] == '\r') || (str[i] == '\n') || (str</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

DOM で tree walk (Libxml2)

DOM で XML のツリー構造を解析する。ノードはリストになって、同じ階層のノードは node->next で、子のノードは cur_node->children で辿ることができる。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> void trim(char *str) { int i; for (i = strlen(str) - </libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

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 *at</libxml/parser.h></libxml/tree.h></stdio.h>…

Libxml2 環境

Libxml2でコンパイルするにはコンパイルオプションを以下のようにする。 gcc `xml2-config --cflags` srouce.c -o a.out `xml2-config --libs` この後のエントリで役に立つ例を書く予定。とりあえず、Libxml2の使い方の例。役に立たないけど、XMLファイルを…