Linux C语言调用libxml2的库文件。格式化xml文件,让rootElement的闭合标签新起一行!
好久没有更新了.其实这周在写东西,东西没出来,就没有写博客了.
刚才发现一个超级恶心的问题.
我用libxml读取xml数据,然后插入一个数据。但是居然是一行,而没有新起一行。怎么办呢,我就搜libxml format 和xmlSaveFormatFile ,还是有不少这样的问题的。还有人说这是一个bug,其实很恶心的很好笑的。
在libxml2的 $PREFIX/share/gtk-doc/html/libxml2/libxml2-tree.html#xmlSaveFormatFileEnc 有这样的一个解释.
xmlSaveFormatFile ()
int xmlSaveFormatFile (const char * filename, xmlDocPtr cur, int format)
Dump an XML document to a file. Will use compression if compiled in and enabled. If @filename is "-" the stdout file is used.
If @format is set then the document will be indented on output.
Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called。
filename: the filename (or URL)
cur: the document
format: should formatting spaces been added
Returns: the number of bytes written or -1 in case of failure.
最后一个参数是format,=1的时候就可以format,但是,当 下面两个全局变量 值被设置 才管用。
xmlKeepBlanksDefault(0) ;//libxml2 global variable .
xmlIndentTreeOutput = 1 ;// indent .with \n
有这两个参数并进行设置才可以管用。在xmlSaveFormatFile前面加入这两行,运行不管用。
然后搜索。最后看到一个说用xmlReadFile而不是xmlParseFile解析文件。
doc1 = xmlParseFile(docname);
//doc1 = xmlReadFile(docname, NULL, XML_PARSE_NOBLANKS);
发现貌似还不管用。后来发现,在这个解析xml文件前面加上 上面的两个全局变量,终于有换行了。而且还自动格式化了xml文件。不管用那个都管用。
所以这不是一个bug,而是一个调用先后的问题。但是上面的函数 解释的,一点也没有申明这一点。所以,反正现在可以格式化xml文件了,很好的。。
附上一些我搜索到的一些资料链接:
http://www.cppblog.com/lymons/archive/2009/03/30/37553.html
http://westsoftware.blog.163.com/blog/static/2609410920072175245763/ 这里有一个中文版本的文档.示例很重要.有了示例好办事情了.
------------------------------------------------------------------------------------------------
一定要专业!本博客定位于 ,C语言,C++语言,Java语言,Android开发和少量的Web开发,之前是做Web开发的,其实就是ASP维护,发现EasyASP这个好框架,对前端后端数据库 都很感觉亲切啊。. linux,总之后台开发多一点。以后也愿意学习 cocos2d-x 游戏客户端的开发。