⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wp_exmlnode.cpp

📁 电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下
💻 CPP
字号:
#include "WP_EXMLNode.h"#include "WP_Utility.h"WP_EXMLNode::WP_EXMLNode(){    m_strXML = "";    m_strName = "";    m_strValue = "";}WP_EXMLNode::WP_EXMLNode(const char* pszName, const char* pszValue){    m_strXML = "";    m_strName = pszName;    m_strValue = pszValue;}WP_EXMLNode::~WP_EXMLNode(){    unsigned int i;    for(i=0;i<m_Childs.size();i++)        delete m_Childs[i];    for(i=0;i<m_Attributes.size();i++)        delete m_Attributes[i];    m_Childs.clear();    m_Attributes.clear();}WP_EXMLNode* WP_EXMLNode::AddChild(const char* pszName, const char* pszValue){    WP_EXMLNode *pChild = new WP_EXMLNode(pszName, pszValue);    AddChild(pChild);    return pChild;}WP_EXMLAttribute* WP_EXMLNode::AddAttribute(const char* pszName, const char* pszValue){    WP_EXMLAttribute *pAttri = new WP_EXMLAttribute(pszName, pszValue);    AddAttribute(pAttri);    return pAttri;}void WP_EXMLNode::AddChild(WP_EXMLNode *pChild){    //m_Childs.push( pChild );    m_Childs.push_back(pChild);    m_strXML = "";}void WP_EXMLNode::RemoveChild(WP_EXMLNode *pNode){    std::vector<WP_EXMLNode*>::iterator iter;    for(iter=m_Childs.begin(); iter!=m_Childs.end();)    {        if( *iter == pNode )        {            iter = m_Childs.erase(iter);            m_strXML = "";            break;        }        else        {            iter++;        }    }}void WP_EXMLNode::AddAttribute(WP_EXMLAttribute *pAttr){    m_Attributes.push_back( pAttr );    m_strXML = "";}void WP_EXMLNode::RemoveAttribute(WP_EXMLAttribute *pAttr){    std::vector<WP_EXMLAttribute*>::iterator iter;    for(iter=m_Attributes.begin(); iter!=m_Attributes.end();)    {        if( *iter == pAttr )        {            iter = m_Attributes.erase(iter);            m_strXML = "";            break;        }        else        {            iter++;        }    }}void WP_EXMLNode::SetName(const char *pszName){    m_strName = pszName;    m_strXML = "";}void WP_EXMLNode::SetValue(const char *pszValue){    m_strValue = pszValue;    m_strXML = "";}void WP_EXMLNode::GetName(std::string &strName){    strName = m_strName;}void WP_EXMLNode::GetValue(std::string &strValue){    strValue = m_strValue;}const char* WP_EXMLNode::GetName(){    if (m_strName.empty())        return "";    return m_strName.c_str();}const char* WP_EXMLNode::GetValue(){    if (m_strValue.empty())        return "";    return m_strValue.c_str();}WP_EXMLNode* WP_EXMLNode::GetChildNode(long index){    // index --- GetChildCount    return m_Childs[index];}WP_EXMLNode* WP_EXMLNode::FindChild(const char *pszQuery){    char *pszCursor = strchr(pszQuery, '/');    if (NULL != pszCursor)    {        string strQueryName;        strQueryName.append(pszQuery, 0, pszCursor-pszQuery);        for (unsigned int i=0; i<m_Childs.size(); i++)        {            WP_EXMLNode* pNode = m_Childs[i];            string strName = pNode->GetName();            if ( strcmp_lower(strQueryName, strName) == 0 )                return pNode->FindChild( pszCursor+1 );        }    }    else    {        //= 如果用户指定了查询节点名为起始父节点名,则返回起始父节点,        //= 与函数名称不一致,这里假定用户不会做这样的查询,因为起始        //= 节点的名称通过节点句柄已经能够直接获得,没有理由再做这样        //= 的查询        string strQueryName = pszQuery;        string strName = this->m_strName;        if ( strcmp_lower(strQueryName, strName) == 0)            return this;        for (unsigned int i=0; i<m_Childs.size(); i++)        {            WP_EXMLNode* pNode = m_Childs[i];            string strName = pNode->GetName();            if ( strcmp_lower(strQueryName, strName) == 0 )                return pNode;        }    }    return NULL;}WP_EXMLAttribute* WP_EXMLNode::GetAttribute(long index){    // index --- GetAttributeCount    return m_Attributes[index];}WP_EXMLAttribute* WP_EXMLNode::FindAttribute(const char *pszQuery){//    EString sq = szQuery;//    int iPos = sq.Findf('@');//    if ( iPos < 0 )//        return NULL;//    if ( iPos == 0 )//    {//        for (int i=0; i<m_Attributes.size(); i++)//        {//            EXMLAttribute* pa = m_Attributes[i];//            EString s;//            pa->GetName( s );//            EString sa;//            sa=sq.Right(sq.Length()-2);//            if ( CompareCase(s,sq) == 0 )//                return pa;//        }//    }//    else//    {//        if ( sq[iPos-1] != '/' )//                    return NULL;//        WP_EXMLNode* pNode = FindChild( sq.Left(iPos-1).Text() );//        if ( pNode != NULL )//            return pNode->FindAttribute(sq.Right(sq.Length()-iPos-1).Text());//    } unsigned int i;    for (i=0; i<m_Attributes.size(); i++)    {        WP_EXMLAttribute* pa = m_Attributes[i];        string strQueryName = pszQuery;        string strAttriName = pa->GetName();        if ( strcmp_lower(strQueryName, strAttriName) == 0 )            return pa;    }    return NULL;}long WP_EXMLNode::GetChildCount(){    return m_Childs.size();}long WP_EXMLNode::GetAttributeCount(){    return m_Attributes.size();}const char *WP_EXMLNode::GetXML(int &nFormatTabs){//    if (m_strXML.empty())//        ToXML(nFormatTabs);    /// 为了格式化控制,每次重新生成    m_strXML = "";    ToXML(nFormatTabs);    return m_strXML.c_str();}void WP_EXMLNode::ToXML(int &nFormatTabs){    int nTabs;    unsigned int i;    m_strXML = "\n";    for (nTabs=0; nTabs<nFormatTabs; nTabs++)        m_strXML += "\t";    m_strXML += "<";    m_strXML += m_strName;    for (i=0; i<m_Attributes.size(); i++)    {        WP_EXMLAttribute* pAttri = m_Attributes[i];        std::string s;        pAttri->GetXML( s );        m_strXML += " ";        m_strXML += s;    }    if ( m_Childs.size() < 1 && m_strValue.length() < 1 )    {        m_strXML += "/>";        return;    }    m_strXML += ">";    if ( m_Childs.size() < 1 )    {        std::string strValue = m_strValue;        //= 替换存在先后顺序        replace_all_distinct(strValue, "&", "&amp");        replace_all_distinct(strValue, "<", "&lt;");        replace_all_distinct(strValue, ">", "&gt;");        m_strXML += m_strValue;    }    else    {        nFormatTabs++;        for(i=0; i<m_Childs.size(); i++)        {            WP_EXMLNode* pNode = m_Childs[i];            pNode->ToXML(nFormatTabs);            // std::string s;            // pNode->GetXML(s);            std::string s = pNode->GetXML(nFormatTabs);            m_strXML += s;        }        nFormatTabs--;    }    m_strXML += "\n";    for (nTabs=0; nTabs<nFormatTabs; nTabs++)        m_strXML += "\t";    m_strXML += "</";    m_strXML += m_strName;    m_strXML += ">";}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -