linux tinyxml遍历

本文介绍了使用TiXml库解析XML文件的两种方法。方法一通过遍历元素节点获取属性和子元素信息;方法二采用递归方式遍历XML结构,并处理属性及文本节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一、

 

bool ReadElemnt(string& szFileName)
{
 TiXmlDocument myDocument(szFileName);   
  bool loadOkay = myDocument.LoadFile();
  if(loadOkay == false)
   return false;
 TiXmlElement *rootElement = myDocument.RootElement();
 if(rootElement == NULL)
  return false;
 
 TiXmlElement *pItemElement = rootElement->FirstChildElement();
 TiXmlNode *pNextchild = pItemElement->ToElement();
 while(pNextchild)
 {
  pItemElement = pNextchild->ToElement();  
  
    TiXmlElement *NameElement = pItemElement->FirstChildElement();
    TiXmlElement *AgeElement = NameElement->NextSiblingElement();
    TiXmlAttribute *IDAttribute = pItemElement->FirstAttribute();       
    //输出第一个Person的name内容,即周星星;age内容,即20;ID属性,即1。     
  cout << NameElement->FirstChild()->Value() << "<br>";         
    cout << AgeElement->FirstChild()->Value() << "<br>";
    cout << IDAttribute->Value() << "<br>/n";
    
    pNextchild = pNextchild->NextSibling();
 }
 
 return true;
}

 

 

 

方法二、

void ParaseUpdateXml(TiXmlNode* pParent)
{
  if(pParent == NULL)
  return;        

  TiXmlNode* pChild = pParent->FirstChild();    
  while(pChild)
  {          
    cout << pChild->Value() << "<br>";
    int t = pChild->Type();
    if( t == TiXmlNode::ELEMENT)
    {   
      TiXmlAttribute *attr = pChild->ToElement()->FirstAttribute();        
      if(attr)
      {                    
        TiXmlNode* node = pChild;
        while(node)
        {
          while(attr)                        
          {                       
            //cout << " " << attr->Name() << "=" << attr->Value() << "###<br>";
            attr = attr->Next();
          }       
          //cout << endl;                   
          node =  node->NextSiblingElement();       
        }                                                 
      }           
      ParaseUpdateXml(pChild);
    
    }                 
    else if( t == TiXmlNode::TEXT)
    {              
      //cout << pChild->Value() << "@@@<br>";                            
    }      
    
    pChild = pChild->NextSibling();  
  } 
}

### 嵌入式 Linux 环境下 TinyXML 使用教程 #### 1. TinyXML 特性和适用场景 TinyXML 是一个轻量级的 C++ 库,用于解析和生成 XML 数据。它特别适合于资源有限的环境,比如嵌入式系统[^2]。由于其简单易用的 API 和较低的内存开销,在嵌入式 Linux 中使用 TinyXML 可以为开发者提供一种高效的方式来管理配置文件或其他结构化数据。 #### 2. 示例代码:加载并读取 XML 文件 下面展示了一个基本的例子,演示如何在嵌入式 Linux 下使用 TinyXML 加载 XML 文件并访问其中的数据: ```cpp #include "tinyxml2.h" #include <iostream> int main() { tinyxml2::XMLDocument doc; // 尝试加载 XML 文件 const char* filename = "example.xml"; if (doc.LoadFile(filename) != tinyxml2::XMLError::XML_SUCCESS) { std::cerr << "Failed to load file: " << filename << std::endl; return -1; } // 获取根节点 tinyxml2::XMLElement* root = doc.RootElement(); if (!root) { std::cerr << "No root element found!" << std::endl; return -1; } std::cout << "Root Element Name: " << root->Name() << std::endl; // 遍历子节点 for (tinyxml2::XMLElement* child = root->FirstChildElement(); child != nullptr; child = child->NextSiblingElement()) { std::string name = child->Name(); std::string value = child->GetText(); std::cout << "Child Node Name: " << name << ", Value: " << (value.empty() ? "<empty>" : value.c_str()) << std::endl; } return 0; } ``` 上述代码展示了如何加载 XML 文件、查找根节点以及遍历子节点的过程[^4]。 #### 3. 编译与运行注意事项 在嵌入式 Linux 上编译此代码时需要注意以下几点: - **交叉编译工具链**:如果目标设备架构不同于主机,则需设置合适的交叉编译器。 - **静态链接 vs 动态链接**:对于某些资源受限的目标板,可能更倾向于采用静态链接方式来减少依赖项大小。 - **优化选项**:启用 `-O2` 或更高水平的优化可以进一步提升性能表现[^1]。 #### 4. 性能考量 当考虑将 TinyXML 运用于实际项目之前,请评估它的性能特性是否满足需求。相比其他高级别的库(如 libxml2),虽然 TinyXML 提供了更加简洁直观的操作接口,但在复杂文档处理方面可能会稍逊一筹。然而,这并不妨碍它成为许多中小型项目的首选解决方案之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值