用tinyxml解析xml时,如何得到父节点的内容。 比如:<body><a>hello</a></body> 我想要得到body标签的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用tinyxml解析xml时,如何得到父节点的内容。 比如:<body><a>hello</a></body> 我想要得到body标签的相关的知识,希望对你有一定的参考价值。

该值为<a>hello</a>

参考技术A 这个是我用DELPHI获取的 有些变量的多余的 这里只是整个过程的一部分 不过可以回答你的问题了

procedure TfrmTestChapter.Get_Source;
var
i: Integer;
TestSBC: TTestSBC;
lblname, pnlname, sSource, imgsrcListName: string;
imgBgName:string;
j:integer;
Str:string;
RootNode:IXMLNode;
begin
self.xmldcmnt1.Active:=False;
self.xmldcmnt1.XML.Text:='<?xml version="1.0" encoding="GB2312" ?>'+
'<fill version="1.0">'+
'<Source>'+
'<SrcID>9</SrcID>'+
'<Source>章节练习</Source>'+
'</Source>'+
'<Source>'+
'<SrcID>6</SrcID>'+
'<Source>高频考点</Source>'+
'</Source>'+
'<Source>'+
'<SrcID>12</SrcID>'+
'<Source>考前自测</Source>'+
'</Source>'+
'<Source>'+
'<SrcID>8</SrcID>'+
'<Source>易错与避错考题</Source>'+
'</Source>'+
'</fill>';
// self.xmldcmnt1.XML.Text:=RecXml;
self.xmldcmnt1.Active:=true;
RootNode:=self.xmldcmnt1.DocumentElement; //用TXMLDocument来解析
SetLength(FTestSource,RootNode.ChildNodes.Count);
for i := 0 to RootNode.ChildNodes.Count - 1 do //对模块进行分解
begin
for j := 0 to RootNode.ChildNodes[i].ChildNodes.Count- 1 do //取对应模块的数据;
begin
if j=0 then //这里是为了显示能够区分,在中间加了逗号”,“;
begin
Str:=VarToStr(RootNode.ChildNodes[i].ChildNodes[j].Text);
FTestSource[i].SrcID:=StrToInt(Str);
end else
begin
FTestSource[i].Source:=VarToStr(RootNode.ChildNodes[i].ChildNodes[j].Text);
end;
end;
end;
参考技术B 当前节点使用parent 函数获取父节点! 节点对象应该有获取内容的 函数吧! GetText 什么的 你试试追问

试了parent函数和gettext函数,但是一用程序就core了。能不能给我例子什么的啊,万分感激

C++那些事之优雅的解析XML

最近在鹅厂实习中,使用开源的C++ XML解析器-TinyXML-2,今天主要分享该开源项目的基本情况及使用。

1.TinyXML介绍

TinyXML是一个比较优秀的c++ xml解析器,有两个版本,分别是TinyXML与TinyXML-2。最新开源版本TinyXML-2相对于旧版本的 TinyXml 使用更少的内存 , 更快 , 并且使用更少的内存分配 , 因此被广泛应用于现在开发中。

TinyXml2不需要STL ,自然降低了所有的 STL 支持 , 所有字符串操作使用 const char *。两者相同点:

  • 基于DOM解析
  • API简单
  • 支持UTF-8

不同点:

(1) TinyXML

  • 支持部分STL操作:string、流

(2) TinyXML-2

  • 适合现代C++开发
  • 内存分配少,需要更少的内存
  • 无需STL

TinyXML:

https://sourceforge.net/projects/tinyxml/

TinyXML-2:

https://github.com/leethomason/tinyxml2

2. TinyXML-2使用

使用很简单,下载上述github代码,copy其中的tinyxml2.h与.cpp到你的当前目录下,直接引用.h文件,编译即可。

例如:现有test.xml,parse_test.cpp来解析test.xml中的节点。

test.xml

<category version="1.0">
    <book>茅草屋</book>
    <number>1</number>
    <animal></animal>
</category>

parse_test.cpp

#include "tinyxml2.h"
#include <iostream>

using namespace std;
using namespace tinyxml2;
int main()
{
    XMLDocument xml;
    xml.LoadFile("test.xml");

    XMLElement *category = xml.RootElement();
    XMLElement *book = category->FirstChildElement("book");
    XMLElement *number = category->FirstChildElement("number");
    XMLElement *animal = category->FirstChildElement("animal");
    const char* book_name = book->GetText();
    cout << book_name << endl;
    int num = atoi(number->GetText());
    cout << num << endl;
    const char* animal_name = animal->GetText();
    cout << animal_name << endl;

    return 0;
}

编译:

g++ -o parse parse_test.cpp tinyxml2.cpp

输出:

茅草屋
1

当然还有其他的用法,例如:CRUD操作等,自己可以探索一番。


以上是关于用tinyxml解析xml时,如何得到父节点的内容。 比如:<body><a>hello</a></body> 我想要得到body标签的的主要内容,如果未能解决你的问题,请参考以下文章

TinyXML 的简单介绍以及使用

windows客户端开发--使用tinyxml库解析xml文件

解析XML文档时Node和Element的区别

解析xml时,需要校验节点是不是闭合,如必须有与之对应,用数据结构实现比较好

Xml解析 --TinyXML-2

C++那些事之优雅的解析XML