【问题标题】:Get content with libxml2使用 libxml2 获取内容
【发布时间】:2018-11-01 06:01:34
【问题描述】:

我正在尝试使用 libxml2 的函数 xmlNodeGetContent 来访问 xml 文件中的内容,但由于某种原因,无法读取自动关闭选项卡中的内容。

void parseRow (xmlDocPtr doc, xmlNodePtr cur) {

    xmlChar *key;
    cur = cur-> xmlChildrenNode;
    while (cur != NULL) {
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"row"))) {
            key = xmlNodeGetContent( cur->children );
            printf("keyword: %s\n", (char*)key);
            xmlFree(key);
        }
        cur = cur -> next;
    }
    return;
}

我正在使用这个带有两种类型选项卡的示例 xml 文件,并且可以读取第一行选项卡,而第二行返回 (null);

<?xml version="1.0"?>
<story>
  <storyinfo>
    <author>John Fleck</author>
    <datewritten>June 2, 2002</datewritten>
    <row> Id="1" UserId="1" </row>
    <row Id="1" UserId="1" />
    <keyword>Id="hello"</keyword>
  </storyinfo>
</story>

【问题讨论】:

  • 我认为你的意思是“标签”而不是“标签”和“空”而不是“自动关闭”。实际上,您指的是元素。

标签: c xml xml-parsing libxml2


【解决方案1】:

第二行元素为空,没有内容,只有属性。

<tag>non-empty content</tag>
<tag content="attribute value"/>

没有任何模式,框架就不可能知道第二个标签元素是什么类型,它不能为它定义一个默认值,它不能派生一个类型,因此它没有内容。但是它确实有一个内容属性,但是在我知道的大多数框架中,您使用不同的方法访问属性。

【讨论】:

    【解决方案2】:

    如果要获取属性值,使用xmlGetProp。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-08
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 2023-03-03
      相关资源
      最近更新 更多