• tinyxml小记


     1.声明:
    TiXmlDocument *m_pXml;    //<!-- Xml parse -->
    m_pXml = new TiXmlDocument;

    最好用动态生成.

    2.加载xml文件:

    1.xml:

    <?xml version="1.0" encoding="GB2312" standalone="yes"?>
    <author  name="hgy413" sex="man">
        text is hgy
        <childItem1 childname1="hgy">
          child text is hgy
        </childItem1>
    
        <childItem2>
        </childItem2>
    </author>
    
    
    
    	//<!-- new codes -->
    	wchar_t wcPath[MAX_PATH] = {0};
    	::GetModuleFileName(NULL, wcPath, MAX_PATH);
    
    	//<!-- convert unicode to asii -->
    	int nLen = WideCharToMultiByte(CP_ACP, 0, wcPath, -1, 0, NULL, NULL, NULL);
    	char *pPath = (char *)::HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, nLen);
    	::ZeroMemory(pPath, nLen);
    	WideCharToMultiByte(CP_ACP, 0, wcPath, -1, pPath, nLen, NULL, NULL);
    	
    	//<!-- cut \\ tail -->
    	for (int i=nLen-1; i>0; i--)
    	{
    		if ('\\' == pPath[i])
    		{
    			break;
    		}
    		else
    		{
              pPath[i] = '\0';
    		}
    	}
    
    	char FileName[] = "1.xml";
    	strcat(pPath, FileName);
        
    	//-----------------------------------------
    	// 判断XML是否被加载成功,不然清掉对象
    	//-----------------------------------------
    	if (!m_pXml->LoadFile(pPath))
    	{
    		delete m_pXml;
    		m_pXml = NULL;
    	}

    3.解析:

    1 TiXmlDocument:文档类,它代表了整个xml文件。
    2TiXmlDeclaration:声明类,它表示文件的声明部分。
    3 TiXmlComment:注释类,它表示文件的注释部分。
    4TiXmlElement:元素类,它是文件的主要部分,并且支持嵌套结构,一般使用这种结构来分类的存储信息,它可以包含属性类和文本类。
    5 TiXmlAttribute/TiXmlAttributeSet:元素属性,它一般嵌套在元素中,用于记录此元素的一些属性。
    6 TiXmlText:文本对象,它嵌套在某个元素内部。

    TinyXml使用文档对象模型(DOM)来解析xml文件,这种模型的处理方式为在分析时,一次性的将整个XML文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,但可以给用户提供一个面向对象的访问接口,对用户更为友好

    1 TiXmlDocument:文档类

    另存为xml文件:

    m_pXml->SaveFile("1.xml");

    2TiXmlDeclaration:声明类

    //-----------------------------------------------------
    		// 一般来说文档的第一行就是声明对象,你可以把文档对象的第一个子节点转换为声明对象
    		// <?xml version="1.0" encoding="GB2312" standalone="yes"?>
    		//-----------------------------------------------------
    		TiXmlDeclaration *pDeclare = m_pXml->FirstChild()->ToDeclaration();
    		if (pDeclare)
    		{
    			pText = pDeclare->Version(); //<!-- pText == "1.0" -->
    			pText = pDeclare->Encoding();//<!-- pText == "GB2312" -->
    			pText = pDeclare->Standalone();//<!-- pText == "yes" -->
    		}


    4TiXmlElement:元素类:

    元素为一个容器类,它具有元素名称,并可以包含其它元素,文本,注释和未知节点,这些对象统称为元素的节点,即节点可以为元素、文本、注释和未知节点类型。元素也可以包含任意个数的属性

    	TiXmlElement *pRoot = m_pXml->RootElement();//<!-- author根结点 -->
    		pText = m_pXml->Value(); //<!-- pText =="d:\project\XMLDemo\Debug\1.xml" -->
    		if (pRoot)
    		{
    			pText = pRoot->Value();//<!-- pText == "author" -->
    
    			//------------------------------------------------------
    			// 这里和list/tree的遍历相似,先得到第一个值,然后做while循环
    			//------------------------------------------------------
    			TiXmlAttribute *pRootAttribute = pRoot->FirstAttribute();
    			while (pRootAttribute)
    			{
    				pText = pRootAttribute->Name();//<!--第一次: pText =="name", 第二次: pText =="sex">
    				pText = pRootAttribute->Value();//<!--第一次: pText == "hgy413", 第二次: pText =="man">
    				pRootAttribute = pRootAttribute->Next();
    			}
    
    			//------------------------------------------------------
    			// 如果直接写成 pRoot->FirstChildElement();返回的是第一个元素
    			//------------------------------------------------------
    			char Star[] = "childItem1";
    			TiXmlElement *pElement = pRoot->FirstChildElement(Star);
    
    			//<!-- 同样遍历pElement之后的所有元素 -->
    			while (pElement)
    			{
    				TiXmlAttribute *pElementAttribute = pElement->FirstAttribute();
    				while (pElementAttribute)
    				{
    					pText = pElementAttribute->Name();
    					pText = pElementAttribute->Value();
    					pElementAttribute = pElementAttribute->Next();
    				}
    				pText = pElement->GetText();
    
    				//------------------------------------------------------
    				// NextSiblingElement同样可以写入star,那么查询的是下一个同名的元素位置
    				//------------------------------------------------------
    				pElement = pElement->NextSiblingElement();
    			}		
    		}
    

    节点名:

    元素函数总结
    ValueStr //返回元素名称
    SetValue //设置元素名称
    Parent //返回父节点对象
    FirstChild //返回第一个子节点
    LastChild //返回最后一个子节点
    IterateChildren //返回下一个子节点
    InsertEndChild //在最后一个子节点后插入子节点
    InsertBeforeChild //在指定的子节点前插入子节点
    InsertAfterChild //在指定的子节点后插入子节点
    ReplaceChild //替换指定的子节点
    RemoveChild //删除指定的子节点
    Clear //删除所有的子节点
    PreviousSibling //返回同级中前一个节点
    NextSibling //返回同级中后一个节点

    NextSiblingElement //返回同级中后一个元素
    FirstChildElement //返回第一个子元素节点
    Attribute //返回元素中的属性值
    QueryValueAttribute //返回元素中的属性值
    SetAttribute //设置元素中的属性值
    FirstAttribute //返回元素中第一个属性对象
    LastAttribute //返回元素中最后一个属性对象
    RemoveAttribute //删除元素中指定的属性对象

    属性类
    属性为名称="值"对,元素可以具有属性值,但名称必须唯一


     

  • 相关阅读:
    自定义UINavigationBar
    UIImage 拉伸图片 resizableImageWithCapInsets
    自定义UINavigationBar上面的按钮
    tableView中deselectRowAtIndexPath的作用
    [LeetCode] Search a 2D Matrix, Solution
    [LeetCode] Longest Valid Parentheses, Solution
    我也写了一个牛顿迭代法,貌似不需要特殊处理溢出的情况 class Solution { public...
    [LeetCode] Remove Duplicates from Sorted List II, Solution
    [LeetCode] Palindrome Partitioning, Solution
    [LeetCode] Two Sum, Solution
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693584.html
Copyright © 2020-2023  润新知