码迷,mamicode.com
首页 > 其他好文 > 详细

使用libxml2实现 ossim xml rule(规则)的构造

时间:2015-03-02 16:16:39      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

目前在研究ossim,其产生告警的依据有一种xml的规则文件。这些文件都是xml树型结构,研究如何使用libxml2 api 生成这种xml 规则时遇到下面的问题:

1、libxml2 api 哪些是构造xml的接口?

    1)使用 xmlNewNode 创建一个新的节点,节点指针xmlNodePtr。

    2)使用xmlNewProp在节点上增加新的属性

    3)需要注意,xml的属性值都是 xmlChar * 的(即char *),可以直接使用BAD_CAST这个宏,在添加一个数字类型的属性值时

需要先转换为字符串。

    4)使用xmlAddChild为该节点添加一个孩子节点,继续在孩子节点上添加孙子节点。

2、libxml2 api 如何将构造好的 rule 输出到屏幕查看?

    1)构造好一个xml 结构之后,如果需要输出到屏幕查看结果,可以使用xmlDocDumpFormatMemory接口

3、libxml2 api 如何将构造好的 rule 写入xml文件?

    1)如果需要将构造好的xml结构写文件,事先要创建一个文件指针:使用接口xmlNewDoc,指针类型:xmlDocPtr

    2)  使用xmlNewNode 构造一个根节点,使用xmlDocSetRootElement将这个根节点挂在文件指针上。

    3)剩下构造的孩子节点、孙子节点直接挂在上面的根节点上就ok。

4、构造的树形rule在屏幕输出时,是层次分明的,为什么写到文件中就没有层次了?

    1) libxml2写文件的接口有很多:

        xmlSaveFile:只需要输入一个文件路径和当前的节点指针,其实调用的也是xmlSaveFormatFile,只不过给的默认的format是0.

        xmlSaveFormatFile:除了输入上面的两个参数还需要增加format(0/1。。。)

    2)当文件format是0 时,写文件就是不分层次的,当format是1 时,写入文件的xml结构是层次分明的树形结构。

5、构造多个树形的规则存xml文件,为什么会覆盖原来的,怎么解决呢?

     1)在构造树形的xml结构时,需要选对相关的libxml2接口:

         (1)新生成一个xml文件时,使用 xmlDocSetRootElement 添加根节点

         (2)在已经有一个或者多个节点的xml文件中继续添加新的、并列关系的节点,即兄弟节点使用xmlAddNextSibling接口

         (3)如果需要删除一个树形xml结构中的某一个子节点,首先找到该结构中的根节点,然后使用while循环,遍历每一个节点,

                每个节点使用_xmlNode结构体中的next指针连在一起。通过 xmlGetProp找到需要判断的属性值。

                使用xmlUnlinkNode以及xmlFreeNode删除这个节点。

           

使用libxml2实现 ossim xml rule(规则)的构造

标签:

原文地址:http://www.cnblogs.com/liuxftj/p/4273158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!