我正在做的是阅读 xml 文件并尝试将子节点添加到给定的 xml 文件中。但问题是,它在文件中没有正确显示这里是代码:
xmlDocPtr doc;
xmlNodePtr nodeptr=NULL , node = NULL , node_child =NULL;
doc = xmlParseFile("Mainfile.xml");
if (doc == NULL ) {
fprintf(stderr,"Document not parsed successfully. \n");
return;
}
nodeptr = xmlDocGetRootElement(doc);
if (nodeptr == NULL) {
fprintf(stderr,"empty document\n");
xmlFreeDoc(doc);
return;
}
if (xmlStrcmp(nodeptr->name, (const xmlChar *) "story")) {
fprintf(stderr,"document of the wrong type, root node != story");
xmlFreeDoc(doc);
return;
}
node = xmlNewNode( NULL, BAD_CAST "Account" );
xmlNewProp(node, BAD_CAST "id", BAD_CAST "A001");
xmlAddChild(nodeptr , node);
node_child = xmlNewChild(node, NULL, BAD_CAST "Country",BAD_CAST "US");
xmlAddChild(node,node_child);
xmlAddChild(nodeptr , node);
node_child = xmlNewChild(node, NULL, BAD_CAST "City", BAD_CAST "ABC");
xmlAddChild(node,node_child);
xmlAddChild(nodeptr , node);
node_child = xmlNewChild(node, NULL, BAD_CAST "ZIP",BAD_CAST "34040");
xmlAddChild(node,node_child);
xmlAddChild(nodeptr , node);
xmlSaveFile("Mainfile.xml", doc);
xmlFree(doc);
给定的xml文件的结构是
< ?xml version="1.0"? >
< Project >
< author >John Fleck< /author >
< datewritten >June 2, 2002< /datewritten >
< keyword >example keyword< /keyword >
< Account id = "A000" >
< Country >UK< /Country >
< City >XYZ< /City >
< Zip >67688< /Zip >
< /Account >
< /Project >
在使用我的代码之后,xml以下面的格式显示内容
< ?xml version="1.0"? >
< Project >
< author >John Fleck< /author >
< datewritten >June 2, 2002</datewritten>
< keyword >example keyword< /keyword >
< Account id = "A000" >
< Country >UK< /Country >
< City >XYZ< /City >
< Zip >67688< /Zip >
< /Account >
< Account id = "A001" >< Country >US< /Country >< City >ABC< /City >< Zip >34040< /Zip >< /Account >< /Project >
主要问题是没有为子节点添加适当的缩进。
有谁能告诉我我做错了什么?
答案 0 :(得分:1)
XML输出的结构没有通过,但要获得适当的缩进,请尝试使用xmlSaveFormatFile
并使用1作为format
。在你的整个XML之前调用xmlKeepBlanksDefault(0)
,我相信它应该给你想要的缩进(实际上没有能够看到你想要的东西)。