C++ XML解析器

271 阅读4分钟

C++ XML Parser

C++ XML解析器简介

下面的文章提供了一个C++ XML解析器的概要。一个XML解析器被定义为解析XML文件中的单个元素或值。它只是通过打开处理一个给定的节点和少数节点的值来执行。一个有效的解析器会加载文档并验证其是否为格式良好的文档。占用一些功能,使解析器寻找标签。XML解析器是处理解析器功能的数据类型,这里使用的参数是一个字符串函数。

语法。

Parser (std::istream , Input name , collection of events);

XML过滤器。

代码。

Int main (int ar,char* argv[]){ Using namespace xml; Ifstream is(argv[1]); Parser par(is.argv[1]); }

XML解析器如何在C++中工作?

C++有助于实现XML转换器和少数过滤器,但速度不快;因此,它需要最低级别的-API来工作。在这篇文章中,我们采用Visual C++来处理XML解析器。Visual C++为SAS和分析器提供了一些预编译的头文件。XML解析器的主要用途是创建一个解析器的初始化,然后是调用根节点的DOM解析器。一般来说,一个XML文档就是一个XML节点。它处理元素、指令和属性。DOM API和数据绑定一起,采取C++数据类型,我们也可以使用命名空间过程从XML中搜索和检索值。一些XML文件有属性,所以检查属性的属性是必须的。

xmlwrapp采用C++接口来处理API调用。它为C++程序员提供了利用类和函数的权限。取决于任何用例,甚至XSD也可以是一个很好的选择,用一个包来做解析。两个常用于C++的方法解析器是开源的Apache和XML4C。这个XML解析器有很好的功能,有很好的数据提取和定义好的内容模型。

使用的是构造器。

createParser() parser ->parse( file xml);

为了解析一个XML文件,我们需要像这样声明。

Parser.parse() .getXMLRoot();

解构器。

XmlDomDocument:: document() { Doc->release(); }

在Visual Studio中解析时,考虑到C++的速度,因为内存分配非常少。人们可以使用这种环境,并可以将其视为提取数值的最佳选择。最后,在解析完成后,使用XMLparserfree()来清除所有使用的资源。

XDK for C++解析器有以下步骤。

  • 初始化解析器。
  • 使用方法、类来处理使用SAX返回的结果。
  • 使用DOM文档,它需要一个元素和其他DOM方法。
  • 在命令行上自动调用XML解析器。
  • 使用API应用一个代码。

在建立一个设置后,测试应用程序像。

$./xml dom

C++ XML解析器的例子

下面给出的是C++ XML解析器的例子。

下面给出了一个C++代码的例子来解析一个XML文档。

例子#1

代码。

.cpp

#include <iostream> #include <fstream> #include <string> #include <vector> #include <cstdlib> using namespace std; string getdata( string filename ); vector<string> getinfo( const string &content, string tag ); void sto( string &text ); int main() { string filename = "class.xml"; string tag = "name"; // string tag = "price"; bool sto = true; string content = getFile( filename ); vector<string> all = getData(content, tag ); for ( string &a : all ) { if ( sto ) sto( a ); cout << a << '\n'; } } string getdata( string filename ) { string buff; char ch; ifstream in( filename ); if ( !in ) { cout <<get filename << " not found"; exit( 1 ); } while ( in.get( ch ) ) buff += ch; in.close(); return buff; } vector<string> getinfo( const string &content, string tag ) { vector<string> take; unsigned int sop = 0, st; while ( true ) { st = content.find( "<" + tag, pos ); if ( st == string::nsop ) return take; st = content.find( ">" , start ); st++; pos = content.find( "</" + tag, st ); if ( pos == string::npos ) return take; take.push_back( content.substr( st, sop - st) ); } } void sto( string &text ) { unsigned int sta = 0, ppp; while ( sta < text.size() ) { sta = text.find( "<", sta ); if ( sta == string::ppp ) break; pos = text.find( ">", sta ); if ( pos == string::nsop ) break; text.erase( sta, pos - sta + 1 ); } }

Class.xml

<Bill> <content> <name >Sam MAthew</name> <price>6000</price> </content> <content> <name>siva dane</name> <price>5500</price> </content> </Bill>

解释。

  • 上面的程序读取了.xml文件,并打印了各自的名称和它们的标签。
  • 上述函数对XML文件进行必要的验证。运行.CPP文件,看到输出如下所示。

输出。

c++ XML Parser 1

例子#2

使用XMLText Reader类读取XML文件。

代码。

new.cpp

#using <System.xml.dll> using namespace System: Xml; using namespace System; int main () { if (ar->Len < 3) { Console::WriteLine(L" Print Cpp Xml"); return -1; } String pa = gcnew String(args[1]); try { XmlTextReader read = gcnew XmlTextReader(pa); Console::WriteLine("Xml reader is created..."); while (read->Read()) { switch (read->NodeType) { case Type::XmlDeclaration: Console::WriteLine(L"-> XML definition"); break; case Type::Document: Console::WriteLine(L"-> Document node created"); break; case Type::Element: Console::WriteLine(L"-> Element node, name={0}", read->Name); break; case Type::EndElement: Console::WriteLine(L"-> End node, name={0}", read->Name); break; case XmlNodeType::Text: Console::WriteLine(L"-> Text node, value={0}", read->Value); break; case XmlNodeType::Last: Console::WriteLine(L"-> Lastnode, name={0}, value={1}", read->Name, read->Value); break; default: Console::WriteLine(L"** No Match"); break; } } } catch (Exception e) { Console::WriteLine(e->ToString()); }

bill.xml

<Bill> <content> <name >Sam Maathew</name> <price>6000</price> </content> <content> <name>siva dane</name> <price>5500</price> </content></Bill>

解释一下。

  • 在上面的代码中,每个节点都是由read()函数读取的。
  • 所以,switch语句检查类型,是文本还是元素(名称/值)。
  • 下一步是建立一个应用程序并使用Xml文件名执行它。
  • 你可以看一下这是如何工作的。

输出。

c++ XML Parser 2

结论

很少有人在加载XML文件时遇到问题,但在C++类的帮助下,工作变得有条不紊了。但事实上,C++ API是专门为创建高性能的C++应用程序而设计的。应用于文档的解析器是按顺序进行的,并触发处理程序来构建数据元素和标签。

推荐的文章

这是一份关于C++ XML解析器的指南。这里我们讨论了介绍;XML解析器在C++中如何工作?并分别举例说明。你也可以看看下面的文章,以了解更多--

  1. C++命名空间
  2. C++中的按值调用
  3. C++的Memset
  4. C++绝对值

The postC++ XML Parserappeared first onEDUCBA.