Libxml 2の簡単な紹介と応用
Libxml 2応用及び詳細
XMLは設計の最悪のフォーマットかもしれませんが、ファイルフォーマットとしては本当に拡張能力がなく、通常は完全な災害です.2014年3月6日-Linus Torvalds XMLはでたらめです.解析XMLは人間にとって嫌であり、コンピュータにとっても災難である.この恐ろしいごみを存在させる理由はない.2014年3月6日.-Linus Torvalds
tips: 1.注意事項:子供ノードを表す子供ノードにはフォーマットが必要です
2.質問
デフォルトのLibxml 2は、XMLファイルを書き込むときに、すべての内容を1行に書くので、テキストの表示が不便です.実はLibxml 2はフォーマットされたXMLファイルを生成することができます.解決策
(1)スイッチを入れる:
(2)このスイッチは、XMLノードがDOMツリーに追加される前に開く必要があることに注意してください.すなわち、XMLファイルを作成する前またはXMLファイルをロードする前に(3)ファイルを保存するときにxmlSaveFormatFileまたはxmlSaveFormatFileEncまたはxmlSaveFormatFileToを使用し、最後のパラメータformat=1フォーマットの説明を設定します.Libxml 2はunixの下のライブラリであるため、フォーマットXMLを生成するには改行文字しかありません.リターン記号はなく、インデントはタブではなくスペース記号です.
3.xmlCharタイプはxmlパッケージのcharタイプですが、最後にxmlFree()が必要です.
を選択します. xmlCharは挿入の代わりにUTF-8で符号化された文字列を使用し、xmlFree()の解放を覚えています. xmlDocは解析ドキュメントによって構築されたツリー構造を含み、xmlNodePtrはこの構造を指すポインタ、ルートノードである. xmlNodePtrとxmlNodeは単一の構造を含み、xmlNodePtrはこの構造を指すポインタであり、ドキュメントを遍歴するために使用される.
部分関数の説明
いくつかのパッケージ関数 xmlMalloc動的割り当てメモリ xmlFreeリリースメモリ(xmlChar*) xmlStrcmp文字列比較関数 xml 2-config–cflags取得前処理とコンパイルフラグ xml 2-config–libs取得リンクフラグ xmlファイルの作成例
コンパイルコマンド:gcc creat_xml.c -o creat_xml -I/usr/include/libxml2/-lxml2
xmlファイルの解析
XMLは設計の最悪のフォーマットかもしれませんが、ファイルフォーマットとしては本当に拡張能力がなく、通常は完全な災害です.2014年3月6日-Linus Torvalds XMLはでたらめです.解析XMLは人間にとって嫌であり、コンピュータにとっても災難である.この恐ろしいごみを存在させる理由はない.2014年3月6日.-Linus Torvalds
tips: 1.注意事項:子供ノードを表す子供ノードにはフォーマットが必要です
node1 = cur->xmlChildrenNode;
node2 = node1->xmlChildrenNode->next;
2.質問
デフォルトのLibxml 2は、XMLファイルを書き込むときに、すべての内容を1行に書くので、テキストの表示が不便です.実はLibxml 2はフォーマットされたXMLファイルを生成することができます.解決策
(1)スイッチを入れる:
xmlKeepBlanksDefault(0);
xmlIndentTreeOutput = 1;
(2)このスイッチは、XMLノードがDOMツリーに追加される前に開く必要があることに注意してください.すなわち、XMLファイルを作成する前またはXMLファイルをロードする前に(3)ファイルを保存するときにxmlSaveFormatFileまたはxmlSaveFormatFileEncまたはxmlSaveFormatFileToを使用し、最後のパラメータformat=1フォーマットの説明を設定します.Libxml 2はunixの下のライブラリであるため、フォーマットXMLを生成するには改行文字しかありません.リターン記号はなく、インデントはタブではなくスペース記号です.
3.xmlCharタイプはxmlパッケージのcharタイプですが、最後にxmlFree()が必要です.
を選択します.
部分関数の説明
//
xmlDocPtr doc;
//
doc = xmlParseFile(file_name);
// version = 1.0
doc = xmlNewDoc(BAD_CAST"1.0");
// GB2312
doc = xmlReadFile(docname,"GB2312",XML_PARSE_RECOVER);
// , utf-8
xmlSaveFormatFileEnc(phone_book_file, doc, "UTF-8", 1);
//
xmlSaveFile("test.xml", doc);
// /
xmlSaveFormatFileEnc("-", doc, encoding, 1);
//
xmlFreeDoc(doc);
//
xmlNodePtr cur;
//
root_node = xmlNewNode(NULL, BAD_CAST"root");
//
xmlNewProp(root_node, "value", (xmlChar *)"123");
//
xmlDocSetRootElement(doc, root_node);
//
cur = xmlDocGetRootElement(doc);
//
cur = cur->xmlChildrenNode;
xmlChar *key
// ,
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
// xmlNodeListGetString
xmlFree(key);
// ,123 , NULL
xmlNewTextChild (cur, NULL, "keyword", "123");
//
xmlNodeSetContent(cur, (xmlChar *) "1");
//
xmlGetProp(cur, "value");
// value 1000
xmlSetProp(curNode,BAD_(xmlChar *)"value", (xmlChar *) "1000");
// root_node node
xmlAddChild(root_node,node);
// root_node node
xmlNewChild(root_node, NULL, (xmlChar *) "node",(xmlChar *) szOut);
// (unlink),
xmlUnlinkNode(curNode);
// , xmlDelNode xmlRemoveNode,
xmlFreeNode(curNode);
いくつかのパッケージ関数
コンパイルコマンド:gcc creat_xml.c -o creat_xml -I/usr/include/libxml2/-lxml2
#include
#include
#include
#include
#include
#include
#include
/****************************************
* libxml , xml
* xml ,
*
*@author: wxlinux @date: 2017/10/29
* ***************************************/
#define DEFAULT_XML_FILE " _t.xml"
static int create_phone_books(const char *filename)
{
xmlDocPtr doc = NULL;
xmlNodePtr root_node = NULL;
xmlNodePtr node_ = NULL;
xmlNodePtr node_1 = NULL;
xmlNodePtr node_2 = NULL;
xmlNodePtr node_3 = NULL;
// xmlKeepBlanksDefault(0);
// xmlIndentTreeOutput = 1;
// xml
doc = xmlNewDoc(BAD_CAST"1.0");
if(doc == NULL)
{
printf("failed to new doc .
");
goto FAILED;
}
//
root_node = xmlNewNode(NULL, BAD_CAST"root");
if(root_node == NULL)
{
printf("failed to new root node.
");
goto FAILED;
}
node_ = xmlNewNode(NULL, BAD_CAST"brand");
xmlNewProp(node_, "name", (xmlChar *)"DS");
node_1 = xmlNewNode(NULL, BAD_CAST"series");
xmlNewProp(node_1, "name", (xmlChar *)"DS5");
node_2 = xmlNewNode(NULL, BAD_CAST"style");
xmlNewProp(node_2, "name", (xmlChar *)"2014 ");
node_3 = xmlNewNode(NULL, BAD_CAST"type");
xmlNewProp(node_3, "name", (xmlChar *)" ");
xmlDocSetRootElement(doc, root_node);
xmlAddChild(root_node, node_);
xmlAddChild(node_, node_1);
xmlAddChild(node_1, node_2);
xmlAddChild(node_2, node_3);
xmlSaveFormatFileEnc(filename, doc, "UTF-8", 1);
xmlFreeDoc(doc);
return 0;
FAILED:
if(doc)
{
xmlFreeDoc(doc);
}
return -1;
}
int main(int argc, char const *argv[])
{
char *xml_file = DEFAULT_XML_FILE;
create_phone_books(xml_file);
return 0;
}
xmlファイルの解析