検索

关于libxml2库的详细信息的查看方法请查看: http://blog.csdn.net/wangkai_123456/article/details/25710971 libxml2库的安装方法: sudo apt-get install libxml2 sudo apt-get install libxml2-dev 利用以上命令安装完软件包后可以利用以下命令来查看软件

        关于libxml2库的详细信息的查看方法请查看:http://blog.csdn.net/wangkai_123456/article/details/25710971


        libxml2库的安装方法:

sudo apt-get install libxml2

sudo apt-get install libxml2-dev


        利用以上命令安装完软件包后可以利用以下命令来查看软件包的状态(确定是否安装成功)

dpkg -s libxml2-dev

也可以用如下命令(得到的结果是一样的):

dpkg-query -s libxml2-dev


        软件安装好后,默认情况下,libxml2对应的头文件均放置在/usr/include/libxml2/libxml目录下,这一信息可利用如下两个命令查看(任一命令都能查看到相关信息)

dpkg -L libxml2-dev

xml2-config --cflags


       libxml2的库文件放置在/usr/lib/i386-linux-gnu目录下,这一信息可利用如下两个命令查看(任一命令都能查看到相关信息

dpkg -L libxml2-dev

xml2-config --libs


        对应libxml2有一个工具,名字为xml2-config,xml2-config所在的目录为/usr/bin,其实这是一个shell脚本,关于xml2-config的详细信息可以通过如下命令来查看

man xml2-config


        安装后libxml2库后,就可以开始进行基于libxml2库的开发了。现有以下一段程序,程序文件名为CreateXmlFile.c,是基于libxml2库开发的。代码如下

/**********************************
created: 2014/05/12
filename: CreateXmlFile.c
auther: wang kai
depend: libxml2.lib
purpose: 创建一个xml文件
**********************************/

#include<stdio.h>
#include<libxml>
#include<libxml>

int main(int argc, char **argv)
{
	//Define document pointer
	xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0");

    //Define node pointer
	xmlNodePtr root_node = xmlNewNode(NULL,BAD_CAST"root");

	//Set the root element of the document
	xmlDocSetRootElement(doc,root_node);

	//Create child nodes directly in the root node
	xmlNewTextChild(root_node,NULL,BAD_CAST"newnode1",BAD_CAST"newnode1 content");
	xmlNewTextChild(root_node,NULL,BAD_CAST"newnode2",BAD_CAST"newnode2 content");

	//Create a new node
	xmlNodePtr node = xmlNewNode(NULL,BAD_CAST"node2");
	//Create a new text node
	xmlNodePtr content = xmlNewText(BAD_CAST"NODE CONTENT");

	//Add a new node to parent
	xmlAddChild(root_node,node);
	xmlAddChild(node,content);
	//Create a new property carried by a node
	xmlNewProp(node,BAD_CAST"attribute",BAD_CAST"yes");

	//Create a son and grandson node element
	node = xmlNewNode(NULL,BAD_CAST"son");
	xmlAddChild(root_node,node);
	xmlNodePtr grandson = xmlNewNode(NULL,BAD_CAST"grandson");
	xmlAddChild(node,grandson);
	xmlAddChild(grandson,xmlNewText(BAD_CAST"THis is a grandson node"));
	
	//Dump an XML document to a file
	int nRel = xmlSaveFile("CreatedXml.xml",doc);
	if(nRel != -1)
		printf("一个xml文档被创建,写入 %d 个字节\n",nRel);
	
	//Free up all the structures used by a document,tree included
	xmlFreeDoc(doc);
	//printf("Hello World!\n");
	return 0;
}</libxml></libxml></stdio.h>
         对这个程序进行编译时,可用以下命令

gcc -I/usr/include/libxml2  CreateXmlFile.c -o CreateXmlFile -L /usr/lib/i386-linux-gnu -lxml2

         其中,-I参数是为了指定gcc编译器查找头文件的路径,-L参数是为了指定libxml2库文件所在的路径,最后的 

  -lxml2指定具体的库文件。(-lxml2一定要放在命令的最后位置,不然会出现找不到链接库的错误,如下图所示)

Ubuntu12.4.04下libxml2的安装和使用

具体为什么一定要把-lxml2放在最后的位置,本人目前还没弄明白,有待进一步研究

        

        编译命令也可以写成如下形式:

gcc `xml2-config --cflags` -L /usr/lib/i386-linux-gnu CreateXmlFile.c -o CreateXmlFile -lxml2

gcc `xml2-config --cflags`  CreateXmlFile.c -o CreateXmlFile -L /usr/lib/i386-linux-gnu -lxml2

gcc CreateXmlFile.c -o CreateXmlFile `xml2-config --cflags --libs`

        形式虽然不一样,其实命令的实际内容是一样的。因为命令xml2-config --cflags的执行结果为

-I/usr/include/libxml2         (指明include头文件所在的目录)

        命令xml2-config --libs的执行结果为

-L/usr/lib/i386-linux-gnu -lxml2   (指明libxml2库文件所在的目录以及具体的库文件)

      (不管写成何种形式,只要保证 -lxml2 在编译命令的最后位置即可)






声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLはデータレプリケーションをどのように処理しますか?MySQLはデータレプリケーションをどのように処理しますか?Apr 28, 2025 am 12:25 AM

MySQLは、非同期、半同期、およびグループ複製の3つのモードを介してデータの複製を処理します。 1)非同期の複製パフォーマンスは高くなりますが、データが失われる可能性があります。 2)半同期複製により、データセキュリティが向上しますが、遅延が増加します。 3)グループレプリケーションは、高可用性要件に適したマルチマスターレプリケーションとフェールオーバーをサポートします。

説明ステートメントを使用してクエリパフォーマンスを分析するにはどうすればよいですか?説明ステートメントを使用してクエリパフォーマンスを分析するにはどうすればよいですか?Apr 28, 2025 am 12:24 AM

説明ステートメントは、SQLクエリのパフォーマンスを分析および改善するために使用できます。 1.説明ステートメントを実行して、クエリプランを表示します。 2。出力結果を分析し、アクセスの種類、インデックスの使用量に注意し、順序を結合します。 3.分析結果に基づいてインデックスを作成または調整し、結合操作を最適化し、フルテーブルスキャンを回避してクエリ効率を向上させます。

MySQLデータベースをバックアップして復元するにはどうすればよいですか?MySQLデータベースをバックアップして復元するにはどうすればよいですか?Apr 28, 2025 am 12:23 AM

論理バックアップにMySQLDUMPとホットバックアップにMySQLenterPriseBackupを使用することは、MySQLデータベースをバックアップする効果的な方法です。 1. mysqldumpを使用してデータベースをバックアップします:mysqldump-uroot-pmydatabase> mydatabase_backup.sql。 2。ホットバックアップにmysqlenterprisebackupを使用:mysqlbackup - user = root-password = password - backup-dir =/path/to/backupbackup。回復するときは、対応する寿命を使用します

MySQLのスロークエリの一般的な原因は何ですか?MySQLのスロークエリの一般的な原因は何ですか?Apr 28, 2025 am 12:18 AM

MySQLのクエリが遅い主な理由には、インデックスの欠落または不適切な使用、クエリの複雑さ、過剰なデータボリューム、および不十分なハードウェアリソースが含まれます。最適化の提案には以下が含まれます。1。適切なインデックスを作成します。 2。クエリステートメントを最適化します。 3.テーブルパーティションテクノロジーを使用します。 4.適切にハードウェアをアップグレードします。

mysqlのビューは何ですか?mysqlのビューは何ですか?Apr 28, 2025 am 12:04 AM

MySQLビューは、SQLクエリの結果に基づいた仮想テーブルであり、データを保存しません。 1)ビューは複雑なクエリを簡素化し、2)データセキュリティを強化し、3)データの一貫性を維持します。ビューは、テーブルのように使用できるデータベースにクエリを保存しますが、データは動的に生成されます。

MySQLと他のSQL方言の構文の違いは何ですか?MySQLと他のSQL方言の構文の違いは何ですか?Apr 27, 2025 am 12:26 AM

MySQLdiffersfromotherSQLdialectsinsyntaxforLIMIT,auto-increment,stringcomparison,subqueries,andperformanceanalysis.1)MySQLusesLIMIT,whileSQLServerusesTOPandOracleusesROWNUM.2)MySQL'sAUTO_INCREMENTcontrastswithPostgreSQL'sSERIALandOracle'ssequenceandt

MySQLパーティションは何ですか?MySQLパーティションは何ですか?Apr 27, 2025 am 12:23 AM

MySQLパーティション化により、パフォーマンスが向上し、メンテナンスが簡素化されます。 1)大きなテーブルを特定の基準(日付範囲など)、2)物理的に独立したファイルに物理的に分割する、3)MySQLはクエリするときに関連するパーティションに焦点を合わせることができます。

MySQLで特権をどのように許可して取り消しますか?MySQLで特権をどのように許可して取り消しますか?Apr 27, 2025 am 12:21 AM

mysqlで許可を許可および取り消す方法は? 1。grantallprivilegesondatabase_name.to'username'@'host 'などの許可を付与するために付与ステートメントを使用してください。 2。Revokeallprivilegesondatabase_name.from'username'@'host 'など、Revoke Statementを使用して、許可のタイムリーな通信を確保します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません