C++ tinyxml

1 篇文章 0 订阅
#include "tinyxml.h"
#include "tinystr.h"
#include <iostream>
#include <string>

using namespace std;

/*
int readxmlFile()
{
    TiXmlDocument mydoc("FAULT.XML");
    bool loadOk = mydoc.LoadFile();
    if (!loadOk)
    {
        cout << "Opem fail!";
        exit(1);
    }

    //mydoc.Print();

    TiXmlElement * RootElement = mydoc.RootElement(); //根元素
    cout << RootElement->Value() << endl;


    TiXmlElement *pFirst = RootElement->FirstChildElement();
    cout << pFirst->Value() << endl;
    TiXmlElement *pSecond = pFirst->FirstChildElement();
    cout << pSecond->Value() << endl;
    //TiXmlElement *pFourth = pThird->FirstChildElement();


    for (TiXmlElement *pThird = pSecond->FirstChildElement();
        pThird != NULL; pThird = pThird->NextSiblingElement())
    {
        TiXmlElement* pFourth = pThird->FirstChildElement();
        if (pFourth->GetText() != NULL)
            cout << pFourth->GetText() << endl;
    }


    return 1;
}

int main()
{
    readxmlFile();
    getchar();

    return 0;
}

*/




// tutorial demo program


// ----------------------------------------------------------------------
// STDOUT dump and indenting utility functions
// ----------------------------------------------------------------------
const unsigned int NUM_INDENTS_PER_SPACE = 2;

const char * getIndent(unsigned int numIndents)
{
    static const char * pINDENT = "                                      + ";
    static const unsigned int LENGTH = strlen(pINDENT);
    unsigned int n = numIndents*NUM_INDENTS_PER_SPACE;
    if (n > LENGTH) n = LENGTH;

    return &pINDENT[LENGTH - n];
}

// same as getIndent but no "+" at the end
const char * getIndentAlt(unsigned int numIndents)
{
    static const char * pINDENT = "                                        ";
    static const unsigned int LENGTH = strlen(pINDENT);
    unsigned int n = numIndents*NUM_INDENTS_PER_SPACE;
    if (n > LENGTH) n = LENGTH;

    return &pINDENT[LENGTH - n];
}

int dump_attribs_to_stdout(TiXmlElement* pElement, unsigned int indent)
{
    if (!pElement) return 0;

    TiXmlAttribute* pAttrib = pElement->FirstAttribute();
    int i = 0;
    int ival;
    double dval;
    const char* pIndent = getIndent(indent);
    printf("\n");
    while (pAttrib)
    {
        printf("%s%s: value=[%s]", pIndent, pAttrib->Name(), pAttrib->Value());

        if (pAttrib->QueryIntValue(&ival) == TIXML_SUCCESS)    printf(" int=%d", ival);
        if (pAttrib->QueryDoubleValue(&dval) == TIXML_SUCCESS) printf(" d=%1.1f", dval);
        printf("\n");
        i++;
        pAttrib = pAttrib->Next();
    }
    return i;
}

void dump_to_stdout(TiXmlNode* pParent, unsigned int indent = 0)
{
    if (!pParent) return;

    TiXmlNode* pChild;
    TiXmlText* pText;
    int t = pParent->Type();
    printf("%s", getIndent(indent));
    int num;

    switch (t)
    {
/*  case TiXmlNode::TINYXML_DOCUMENT:
        printf("Document");
        break;

    case TiXmlNode::TINYXML_ELEMENT:
        printf("Element [%s]", pParent->Value());
        num = dump_attribs_to_stdout(pParent->ToElement(), indent + 1);
        switch (num)
        {
        case 0:  printf(" (No attributes)"); break;
        case 1:  printf("%s1 attribute", getIndentAlt(indent)); break;
        default: printf("%s%d attributes", getIndentAlt(indent), num); break;
        }
        break;

    case TiXmlNode::TINYXML_COMMENT:
        printf("Comment: [%s]", pParent->Value());
        break;

    case TiXmlNode::TINYXML_UNKNOWN:
        printf("Unknown");
        break;
*/
    case TiXmlNode::TINYXML_TEXT:
        pText = pParent->ToText();
        printf("Text: [%s]", pText->Value());
        break;
/*
    case TiXmlNode::TINYXML_DECLARATION:
        printf("Declaration");
        break;  */
    default:
        break;
    }
    printf("\n");
    for (pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling())
    {
        dump_to_stdout(pChild, indent + 1);
    }
}

// load the named file and dump its structure to STDOUT
void dump_to_stdout(const char* pFilename)
{
    TiXmlDocument doc(pFilename);
    bool loadOkay = doc.LoadFile();
    if (loadOkay)
    {
        printf("\n%s:\n", pFilename);
        dump_to_stdout(&doc); // defined later in the tutorial
    }
    else
    {
        printf("Failed to load file \"%s\"\n", pFilename);
    }
}

// ----------------------------------------------------------------------
// main() for printing files named on the command line
// ----------------------------------------------------------------------
int main(int argc, char* argv[])
{
    for (int i = 1; i < argc; i++)
    {
        dump_to_stdout(argv[i]);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值