linux环境对xml的影响,Linux环境下C使用的XML解析库:libxml2

由函数返回的xmlPathObjectPtr包含一个结点集和其它需要被迭代及操作的信 息。在这个例子中我们的函数返回xmlXPathObjectPtr,我们使用它打印我们文档中keyword结点的内容。这个结点集对象包含在集合 (nodeNr)中的元素数目及一个结点(nodeTab)数组。

①for (i=0; i < nodeset->nodeNr; i++) {

②keyword = xmlNodeListGetString(doc,

nodeset->nodeTab[i]->xmlChildrenNode, printf("keyword: %s\n", keyword);

xmlFree(keyword);

}

①变量nodeset->Nr持有结点集中元素的数量。我们使用它遍历数组。

②打印每个结点包含的内容。

注释

Note that we are printing the child node of the node that is returned, because the contents of the keyword element are a child text node.注意我们打印的是结点的子结点的返回值,因为keyword元素的内容是一个子文本结点。

写元素

写元素内容使用上面许多一样的步骤—解析文档并遍历树。我们先解析文档然后遍历树查找我们想插入元素的位置。在这个例子中,我们再一次查找“storyinfo

”元素并插入一个keyword。然后我们装文件写入磁盘。完整代码:附录E,添加keyword例程

本例中主要的不同在于parseStory

void

parseStory (xmlDocPtr doc, xmlNodePtr cur, char *keyword) {

①xmlNewTextChild (cur, NULL, "keyword", keyword);

return;

}

①XmlNewTextChild函数添加一个当前结点的新的子元素到树中

一旦结点被添加,我们应当写文档到文件中。你是否想给元素指定一个命名空间?你能添加它,在我们的例子中,命名空间是NULL。

xmlSaveFormatFile (docname, doc, 1);

第一个参数是写入文件的名,你注意到和我们刚刚读入的文件名是一样的。在这个例子中,我们仅仅覆盖原来的文件。第二个参数是一个xmlDoc结构指针,第三个参数设定为1,保证在输出上写入。

libxml(二)

写属性

写属性类似于给一个新元素写文本。在这个例子中,我们将添加一个reference结点 URI属性到我们的文档中。完整代码:附录F,添加属性例程代码。reference是story元素的一个子结点,所以找到并插入新元素及其属性是简单 的。一旦我们在parseDoc进行了错误检查,我们将在正确的位置加放我们的新元素。但进行之前我们需要定义一个此前我们不见过的数据类型。

xmlAttrPtr newattr;

我们也需要xmlNodePtr:

xmlNodePtr newnode;

剩下的parseDoc则和前面一样,检查根结点是否为story。如果是的,那我们知道我们将在指定的位置添加我们的元素。

① newnode = xmlNewTextChild (cur, NULL, "reference", NULL);

②newattr = xmlNewProp (newnode, "uri", uri);

①使用xmlNewTextChild函数添国一个新结点到当前结点位置。

一旦结点被添加,文件应像前面的例子将我们添加的元素及文本内容写入磁盘。0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值