c++ - 使用pugixml使用C++解析数据但无法获取所有节点属性

标签 c++ xml xml-parsing pugixml

我编写了一个解析函数的代码,但它不会解析参数(名称,类型)我的代码:

xml_node GCC_XML = doc.child("GCC_XML");

{


for (xml_node Function = GCC_XML.child("Function");Function; Function= Function.next_sibling("Function"))
{    
    cout<<"Function\n"<<"id= "<<Function.attribute("id").value()<<" , name= "<<Function.attribute("name").value()<<" ,returns: "<<Function.attribute("returns").value()<<Function.child_value("Argument") <<endl;

}

}

这是我要解析的 XML 文件

<?xml version="1.0"?>
<GCC_XML>
  <Namespace id="_1" name="::" members="_2 _3 _4 "/>
  <Function id="_2" name="main" returns="_5" context="_1" location="f0:8"/>
  <Function id="_3" name="a_function" returns="_5" context="_1" location="f0:4">
    <Argument name="f" type="_6"/>
    <Argument name="e" type="_4"/>
  </Function>
  <Struct id="_4" name="EmptyClass" context="_1" location="f0:1" members="_7 _8 " bases=""/>
  <FundamentalType id="_5" name="int"/>
  <FundamentalType id="_6" name="float"/>
  <Constructor id="_7" name="EmptyClass" context="_4" location="f0:1">
    <Argument name="_ctor_arg" type="_9"/>
  </Constructor>
  <Constructor id="_8" name="EmptyClass" context="_4" location="f0:1"/>
  <ReferenceType id="_9" type="_4c"/>
  <File id="f0" name="example1.cxx"/>
</GCC_XML>

问题是它拒绝读取函数参数我的结果是:

 Load result: No error 
Function 
id= _2 , name= main ,returns: _5
 Function 
id= _3 , name= a_function ,returns: _5

我也试过

cout<<"Function\n"<<"id= "<<Function.attribute("id").value()<<" , name= "<<Function.attribute("name").value()<<" ,returns: "<<Function.attribute("returns").value()<<Function.attribute("Argument") <<endl;

给出了相同的结果,只是在参数输出中添加了 0 个输出,这表明它没有读取它

把我放在上面得到相同的结果

最佳答案

参数 不是属性。它是一个元素,是Function 的子元素。您可以像访问任何元素一样访问子元素。

xml_node::child_value 查找具有给定名称(在本例中为 Argument)的 XML 元素,并返回该元素的第一个子文本节点的文本。 Argument,在您的 XML 文件中,;它没有子文本节点。它有属性节点,但那不是一回事。如果你想要 Argument 的属性,你必须请求它们,就像你请求 Function 节点的属性一样。

关于c++ - 使用pugixml使用C++解析数据但无法获取所有节点属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11254286/

相关文章:

java - 无法在 libjvm.dylib (Mac OS) 中找到方法 JNI_GetCreatedJavaVMs

c++ - 如何将带有 unique_ptr vector 的类克隆到基类

xml - 在 Sublime Text 2 中打开时如何自动缩进 XML 文件?

java - 将 APK 文件复制到文件夹中?

java - 意外的 EOF;期待元素 <attribute> 的关闭标记

r - 在多个属性上使用 XPathSApply 条件提取数据

c++ - 我在数组函数中的 Min 和 Max 数字显示除 Max 和 Min 之外的任何内容

c++ - Linux 中 system() 调用的问题

ruby - 类型错误:无法将 Builder::XmlMarkup 转换为数组

java - 在 Java 中读写 XML 文件的问题