2012-01-20 107 views
1

我在C中使用libxml ++ - 2.6来创建一个非常简单的XML文档。使用C + libxml ++添加XML注释

什么是添加技术:根节点之前

  • 评论?
  • 评论里面的节点?

root_node = xmlNewNode(NULL, BAD_CAST "root"); 
xmlDocSetRootElement(doc, root_node); 

dtd = xmlCreateIntSubset(doc, BAD_CAST "root", NULL, BAD_CAST "root.dtd"); 

// neither of these seem to work 

xmlNewComment(BAD_CAST "My Company, LLC"); 

xmlNewDocComment (doc, BAD_CAST "My Company, LLC"); 
+0

这不是libxml ++代码。这是libxml代码。 – murrayc

回答

0

在此之前得到搬到这里我已经张贴在StackOverflow的我自己的答案。很抱歉,请将其作为答案发布,但您无法在评论中进行格式化。 :-)

这对我有效;

root_node = xmlNewNode(NULL, BAD_CAST "root"); 
xmlDocSetRootElement(doc, root_node); 

//========================================================================== 
// Comment block ABOVE the root node 
//========================================================================== 
cur_node = xmlAddPrevSibling(root_node, xmlNewComment(BAD_CAST copyright)); 
      xmlAddNextSibling(cur_node, xmlNewComment(BAD_CAST generated)); 

cur_node = x 

mlNewChild(root_node, NULL, BAD_CAST "Model" , BAD_CAST "FRED"); 

//========================================================================== 
// Comment block inside the root node but ABOVE the Model node 
//========================================================================== 
cur_node = xmlAddPrevSibling(root_node, xmlNewComment(BAD_CAST modinfo)); 
      xmlAddNextSibling(cur_node, xmlNewComment(BAD_CAST more_modinfo)); 

注意,当您添加一个节点,你把它的评论,然后把该评论下方,但仍是新的文档/子元素之前附加linesof评论之前。

另请注意,这些注释可以在根节点之外,而不在可见节点内,它们是根节点的兄弟。

例如

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE TEST SYSTEM "testsystem.dtd"> 
<!--Copyright (c) 2012 SuperTechnology, LLC.--> 
<!--Generated Jan 20 2012 16:15:11--> 
<root_node> 
2
#include <stdio.h> 
#include <libxml/tree.h> 

int 
main() 
{ 
    xmlDocPtr foo = xmlNewDoc("1.0"); 
    xmlNodePtr com = xmlNewDocComment(foo, "bla bla"); 
    xmlNodePtr ins = xmlNewDocComment(foo, "more bla"); 
    xmlNodePtr roo = xmlNewDocNode(foo, NULL, "test", NULL); 

    xmlDocSetRootElement(foo, com); 
    xmlAddSibling(foo, roo); 
    xmlAddChild(roo, ins); 

    xmlDocDump(stdout, foo); 
    return 0; 
} 

导致:

<?xml version="1.0"?> 
<!--bla bla--> 
<test><!--more bla--></test>