libxml2的不容得到节点内容(libxml2 can´t get content from no

2019-07-29 04:45发布

我使用的libxml C和我这是怎么创建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;
}

这是我想从那个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;
}

当我测试headerNode->名称或 - >下一步 - >名字,那么名称是正确的(即it's元素的名称),但内容返回null。 任何人都知道在哪里的问题?

Answer 1:

简短的回答:使用xmlNodeGetContent 。

元素节点本身不包含的内容。 相反,他们有孩子文本节点,以及那些包含内容。 元素的内容可以是文本和标记的混合,这允许它保持顺序,代表实体等

你可以遍历子节点,并期待在他们的内容成员,但xmlNodeGetContent会替你,并且将处理子标签和实体正确。



文章来源: libxml2 can´t get content from node
标签: c xml libxml2