Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在C中使用Libxml2分析XML_C_Xml_Libxml2 - Fatal编程技术网

无法在C中使用Libxml2分析XML

无法在C中使用Libxml2分析XML,c,xml,libxml2,C,Xml,Libxml2,我是libxml2新手,从一个示例开始,我不明白为什么我的示例代码不读取一些标记。我用这种方式创建XML文件 <ACCOUNTS> <ACCOUNT NO="123"> <STATE>GA</STATE> <NAME>John</NAME> </ACCOUNT> <ACCOUNT NO="123"> <STATE>GA</STATE> <NAME>Burgess&l

我是libxml2新手,从一个示例开始,我不明白为什么我的示例代码不读取一些标记。我用这种方式创建XML文件

<ACCOUNTS>
<ACCOUNT NO="123">
<STATE>GA</STATE>
<NAME>John</NAME>
</ACCOUNT>
<ACCOUNT NO="123">
<STATE>GA</STATE>
<NAME>Burgess</NAME>
</ACCOUNT>
</ACCOUNTS>

当我调试时,我注意到它第一次转到ACCOUNT标记并获取值,然后转到下一个ACCOUNT标记,忽略STATE和NAME标记。这个程序有什么问题,这是正确的方法吗?

首先,我不是libxml2方面的专家。但是,您注意到代码从节点帐户转到下一个节点帐户。这是因为其他节点位于这些帐户节点下。为了获得这些被遗忘的子节点,必须进入子节点层次结构

如果你这样看,可能会更容易理解:

<ACCOUNTS>
  <ACCOUNT NO="123">
    <STATE>GA</STATE>
    <NAME>John</NAME>
  </ACCOUNT>
  <ACCOUNT NO="123">
    <STATE>GA</STATE>
    <NAME>Burgess</NAME>
  </ACCOUNT>
</ACCOUNTS>
希望这有帮助

<ACCOUNTS>
  <ACCOUNT NO="123">
    <STATE>GA</STATE>
    <NAME>John</NAME>
  </ACCOUNT>
  <ACCOUNT NO="123">
    <STATE>GA</STATE>
    <NAME>Burgess</NAME>
  </ACCOUNT>
</ACCOUNTS>
subnode = cur->xmlChildrenNode;
while (subnode != NULL) {
    if ((!xmlStrcmp(subnode->name, (const xmlChar *)"STATE"))) {
        // more things...
    }
}