我在C中使用libxml,这就是我创建xml的方法:
xmlDocPtr createXmlSegment(char *headerContent, char *dataContent)
{
xmlDocPtr doc;
doc = xmlNewDoc(BAD_CAST "1.0");
xmlNodePtr rdt, header, data;
rdt = xmlNewNode(NULL, BAD_CAST "rdt-segment");
xmlSetProp(rdt, "id", "1");
header = xmlNewNode(NULL,BAD_CAST "header");
data = xmlNewNode(NULL, BAD_CAST "data");
xmlNodeSetContent(header, BAD_CAST headerContent);
xmlNodeSetContent(data, BAD_CAST dataContent);
xmlAddChild(rdt, header);
xmlAddChild(rdt, data);
xmlDocSetRootElement(doc, rdt);
return doc;
}
Run Code Online (Sandbox Code Playgroud)
这就是我想从那个xml获取数据的方式:
int getDataFromXmlSegment(char *data, char *header, char *content)
{
xmlDocPtr doc = xmlReadMemory(data, strlen(data), NULL, NULL, XML_PARSE_NOBLANKS);
xmlNode *rdt = doc->children;
xmlNode *headerNode = rdt->children;
header = (char *)headerNode->content;
content = (char *)headerNode->next->content;
printf("header: %s, content: %s", header, content);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
当我测试headerNode-> name或 - > next-> name时,名称是正确的(它是那些元素的名称)但内容返回null.谁知道哪里有问题?
Jas*_*ers 14
简短回答:使用xmlNodeGetContent.
元素节点本身不包含内容.相反,它们具有子文本节点,并且包含内容.元素的内容可以是文本和标签的混合,这允许它维护排序,表示实体等.
您可以遍历子节点并查看其内容成员,但xmlNodeGetContent会为您执行此操作,并将正确处理子标记和实体.
| 归档时间: |
|
| 查看次数: |
11890 次 |
| 最近记录: |