【问题标题】:libxml2 can´t get content from nodelibxml2 无法从节点获取内容
【发布时间】:2012-05-08 22:54:06
【问题描述】:

我在 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;
}

这就是我想从那个 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->name 或 ->next->name 时,名称是正确的(它是该元素的名称),但内容返回 null。有谁知道问题出在哪里?

【问题讨论】:

    标签: c xml libxml2


    【解决方案1】:

    简答:使用xmlNodeGetContent

    元素节点本身不包含内容。相反,它们有子文本节点,并且包含内容。元素的内容可能是文本和标签的混合,这允许它保持顺序、表示实体等。

    您可以遍历子节点并查看它们的内容成员,但 xmlNodeGetContent 会为您执行此操作,并且会正确处理子标签和实体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      相关资源
      最近更新 更多