UE4读取本地XML文件

其实这里读取XML也是利用了Tinyxml来读取xml,主要是讲Tinyxml放在UE4中,遇到的一点点坑

1.先给出Tinyxml链接:http://www.grinninglizard.com/tinyxml/,可以下载他的工程

2.用UE4新建一个C++工程,将下图的几个文件添加到UE4.的工程中


3.并在tinyxml的cpp文件中添加本工程的头文件,比如这里是

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include "MatineeProject.h"  
4.在UE4中的任意C++文件中,tinyxml的头文件

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include "tinyxml.h"  
  2. #include "tinystr.h"  
5.尝试利用tinyxml的接口读取本地xml,主要注意一些变量类型的转换,UE4是自己的一套变量类型,并不适用tinyxml

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include <string>
    #include <iostream>
    #include <tinyxml.h>


    void printSchoolXml();
    void readSchoolXml();
    void writeSchoolXml();
    int main(int argc, char** argv) {
    printSchoolXml();
    readSchoolXml();
    writeSchoolXml();
    return 0;
    }


    void printSchoolXml() {
    using namespace std;
    TiXmlDocument doc;  
    const char * xmlFile = "conf/school.xml";
    if (doc.LoadFile(xmlFile)) {  
    doc.Print();  
    } else {
    cout << "can not parse xml conf/school.xml" << endl;
    }
    }


    void readSchoolXml() {
    using namespace std;
    const char * xmlFile = "conf/school.xml";
    TiXmlDocument doc;  
    if (doc.LoadFile(xmlFile)) {  
    doc.Print();  
    } else {
    cout << "can not parse xml conf/school.xml" << endl;
    return;
    }
    TiXmlElement* rootElement = doc.RootElement();  //School元素  
    TiXmlElement* classElement = rootElement->FirstChildElement();  // Class元素
    TiXmlElement* studentElement = classElement->FirstChildElement();  //Students  
    for (; studentElement != NULL; studentElement = studentElement->NextSiblingElement() ) {  
    TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute();  //获得student的name属性  
    for (;attributeOfStudent != NULL; attributeOfStudent = attributeOfStudent->Next() ) {  
    cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl;  
    }


    TiXmlElement* studentContactElement = studentElement->FirstChildElement();//获得student的第一个联系方式 
    for (; studentContactElement != NULL; studentContactElement = studentContactElement->NextSiblingElement() ) {
    string contactType = studentContactElement->Value();
    string contactValue = studentContactElement->GetText();
    cout << contactType  << " : " << contactValue << std::endl;  
    }


    }  
    }




    void writeSchoolXml() {
    using namespace std;
    const char * xmlFile = "conf/school-write.xml";
    TiXmlDocument doc;  
    TiXmlDeclaration * decl = new TiXmlDeclaration("1.0", "", "");  
    TiXmlElement * schoolElement = new TiXmlElement( "School" );  
    TiXmlElement * classElement = new TiXmlElement( "Class" );  
    classElement->SetAttribute("name", "C++");


    TiXmlElement * stu1Element = new TiXmlElement("Student");
    stu1Element->SetAttribute("name", "tinyxml");
    stu1Element->SetAttribute("number", "123");
    TiXmlElement * stu1EmailElement = new TiXmlElement("email");
    stu1EmailElement->LinkEndChild(new TiXmlText("tinyxml@163.com") );
    TiXmlElement * stu1AddressElement = new TiXmlElement("address");
    stu1AddressElement->LinkEndChild(new TiXmlText("中国"));
    stu1Element->LinkEndChild(stu1EmailElement);
    stu1Element->LinkEndChild(stu1AddressElement);


    TiXmlElement * stu2Element = new TiXmlElement("Student");
    stu2Element->SetAttribute("name", "jsoncpp");
    stu2Element->SetAttribute("number", "456");
    TiXmlElement * stu2EmailElement = new TiXmlElement("email");
    stu2EmailElement->LinkEndChild(new TiXmlText("jsoncpp@163.com"));
    TiXmlElement * stu2AddressElement = new TiXmlElement("address");
    stu2AddressElement->LinkEndChild(new TiXmlText("美国"));
    stu2Element->LinkEndChild(stu2EmailElement);
    stu2Element->LinkEndChild(stu2AddressElement);


    classElement->LinkEndChild(stu1Element);  
    classElement->LinkEndChild(stu2Element);  
    schoolElement->LinkEndChild(classElement);  

    doc.LinkEndChild(decl);  
    doc.LinkEndChild(schoolElement); 
    doc.SaveFile(xmlFile);  
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值