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

📄 xmltest.cpp

📁 相信学习过XML的都不会陌生
💻 CPP
📖 第 1 页 / 共 3 页
字号:
								"</passages>";			TiXmlDocument docTest;			docTest.Parse( error );			XmlTest( "Error row", docTest.ErrorRow(), 3 );			XmlTest( "Error column", docTest.ErrorCol(), 17 );			//printf( "error=%d id='%s' row %d col%d\n", (int) doc.Error(), doc.ErrorDesc(), doc.ErrorRow()+1, doc.ErrorCol() + 1 );		}	#ifdef TIXML_USE_STL		{			//////////////////////////////////////////////////////			cout << "\n** Streaming. **\n";			// Round trip check: stream in, then stream back out to verify. The stream			// out has already been checked, above. We use the output			istringstream inputStringStream( outputStream.str() );			TiXmlDocument document0;			inputStringStream >> document0;			ostringstream outputStream0( ostringstream::out );			outputStream0 << document0;			XmlTest( "Stream round trip correct.",	string( demoEnd ).c_str(), 													outputStream0.str().c_str(), true );			std::string str;			str << document0;			XmlTest( "String printing correct.", string( demoEnd ).c_str(), 												 str.c_str(), true );		}	#endif	}		{		const char* str = "<doc attr0='1' attr1='2.0' attr2='foo' />";		TiXmlDocument doc;		doc.Parse( str );		TiXmlElement* ele = doc.FirstChildElement();		int iVal, result;		double dVal;		result = ele->QueryDoubleAttribute( "attr0", &dVal );		XmlTest( "Query attribute: int as double", result, TIXML_SUCCESS );		XmlTest( "Query attribute: int as double", (int)dVal, 1 );		result = ele->QueryDoubleAttribute( "attr1", &dVal );		XmlTest( "Query attribute: double as double", (int)dVal, 2 );		result = ele->QueryIntAttribute( "attr1", &iVal );		XmlTest( "Query attribute: double as int", result, TIXML_SUCCESS );		XmlTest( "Query attribute: double as int", iVal, 2 );		result = ele->QueryIntAttribute( "attr2", &iVal );		XmlTest( "Query attribute: not a number", result, TIXML_WRONG_TYPE );		result = ele->QueryIntAttribute( "bar", &iVal );		XmlTest( "Query attribute: does not exist", result, TIXML_NO_ATTRIBUTE );	}		{		const char* str =	"\t<?xml version=\"1.0\" standalone=\"no\" ?>\t<room doors='2'>\n"							"</room>";		TiXmlDocument doc;		doc.SetTabSize( 8 );		doc.Parse( str );		TiXmlHandle docHandle( &doc );		TiXmlHandle roomHandle = docHandle.FirstChildElement( "room" );		assert( docHandle.Node() );		assert( roomHandle.Element() );		TiXmlElement* room = roomHandle.Element();		assert( room );		TiXmlAttribute* doors = room->FirstAttribute();		assert( doors );		XmlTest( "Location tracking: Tab 8: room row", room->Row(), 1 );		XmlTest( "Location tracking: Tab 8: room col", room->Column(), 49 );		XmlTest( "Location tracking: Tab 8: doors row", doors->Row(), 1 );		XmlTest( "Location tracking: Tab 8: doors col", doors->Column(), 55 );	}		{		const char* str =	"\t<?xml version=\"1.0\" standalone=\"no\" ?>\t<room doors='2'>\n"							"  <!-- Silly example -->\n"							"    <door wall='north'>A great door!</door>\n"							"\t<door wall='east'/>"							"</room>";		TiXmlDocument doc;		doc.Parse( str );		TiXmlHandle docHandle( &doc );		TiXmlHandle roomHandle = docHandle.FirstChildElement( "room" );		TiXmlHandle commentHandle = docHandle.FirstChildElement( "room" ).FirstChild();		TiXmlHandle textHandle = docHandle.FirstChildElement( "room" ).ChildElement( "door", 0 ).FirstChild();		TiXmlHandle door0Handle = docHandle.FirstChildElement( "room" ).ChildElement( 0 );		TiXmlHandle door1Handle = docHandle.FirstChildElement( "room" ).ChildElement( 1 );		assert( docHandle.Node() );		assert( roomHandle.Element() );		assert( commentHandle.Node() );		assert( textHandle.Text() );		assert( door0Handle.Element() );		assert( door1Handle.Element() );		TiXmlDeclaration* declaration = doc.FirstChild()->ToDeclaration();		assert( declaration );		TiXmlElement* room = roomHandle.Element();		assert( room );		TiXmlAttribute* doors = room->FirstAttribute();		assert( doors );		TiXmlText* text = textHandle.Text();		TiXmlComment* comment = commentHandle.Node()->ToComment();		assert( comment );		TiXmlElement* door0 = door0Handle.Element();		TiXmlElement* door1 = door1Handle.Element();		XmlTest( "Location tracking: Declaration row", declaration->Row(), 1 );		XmlTest( "Location tracking: Declaration col", declaration->Column(), 5 );		XmlTest( "Location tracking: room row", room->Row(), 1 );		XmlTest( "Location tracking: room col", room->Column(), 45 );		XmlTest( "Location tracking: doors row", doors->Row(), 1 );		XmlTest( "Location tracking: doors col", doors->Column(), 51 );		XmlTest( "Location tracking: Comment row", comment->Row(), 2 );		XmlTest( "Location tracking: Comment col", comment->Column(), 3 );		XmlTest( "Location tracking: text row", text->Row(), 3 ); 		XmlTest( "Location tracking: text col", text->Column(), 24 );		XmlTest( "Location tracking: door0 row", door0->Row(), 3 );		XmlTest( "Location tracking: door0 col", door0->Column(), 5 );		XmlTest( "Location tracking: door1 row", door1->Row(), 4 );		XmlTest( "Location tracking: door1 col", door1->Column(), 5 );	}	// --------------------------------------------------------	// UTF-8 testing. It is important to test:	//	1. Making sure name, value, and text read correctly	//	2. Row, Col functionality	//	3. Correct output	// --------------------------------------------------------	printf ("\n** UTF-8 **\n");	{		TiXmlDocument doc( "utf8test.xml" );		doc.LoadFile();		if ( doc.Error() && doc.ErrorId() == TiXmlBase::TIXML_ERROR_OPENING_FILE ) {			printf( "WARNING: File 'utf8test.xml' not found.\n"					"(Are you running the test from the wrong directory?)\n"				    "Could not test UTF-8 functionality.\n" );		}		else		{			TiXmlHandle docH( &doc );			// Get the attribute "value" from the "Russian" element and check it.			TiXmlElement* element = docH.FirstChildElement( "document" ).FirstChildElement( "Russian" ).Element();			const unsigned char correctValue[] = {	0xd1U, 0x86U, 0xd0U, 0xb5U, 0xd0U, 0xbdU, 0xd0U, 0xbdU, 													0xd0U, 0xbeU, 0xd1U, 0x81U, 0xd1U, 0x82U, 0xd1U, 0x8cU, 0 };			XmlTest( "UTF-8: Russian value.", (const char*)correctValue, element->Attribute( "value" ), true );			XmlTest( "UTF-8: Russian value row.", 4, element->Row() );			XmlTest( "UTF-8: Russian value column.", 5, element->Column() );			const unsigned char russianElementName[] = {	0xd0U, 0xa0U, 0xd1U, 0x83U,															0xd1U, 0x81U, 0xd1U, 0x81U,															0xd0U, 0xbaU, 0xd0U, 0xb8U,															0xd0U, 0xb9U, 0 };			const char russianText[] = "<\xD0\xB8\xD0\xBC\xD0\xB5\xD0\xB5\xD1\x82>";			TiXmlText* text = docH.FirstChildElement( "document" ).FirstChildElement( (const char*) russianElementName ).Child( 0 ).Text();			XmlTest( "UTF-8: Browsing russian element name.",					 russianText,					 text->Value(),					 true );			XmlTest( "UTF-8: Russian element name row.", 7, text->Row() );			XmlTest( "UTF-8: Russian element name column.", 47, text->Column() );			TiXmlDeclaration* dec = docH.Child( 0 ).Node()->ToDeclaration();			XmlTest( "UTF-8: Declaration column.", 1, dec->Column() );			XmlTest( "UTF-8: Document column.", 1, doc.Column() );			// Now try for a round trip.			doc.SaveFile( "utf8testout.xml" );			// Check the round trip.			char savedBuf[256];			char verifyBuf[256];			int okay = 1;			FILE* saved  = fopen( "utf8testout.xml", "r" );			FILE* verify = fopen( "utf8testverify.xml", "r" );			if ( saved && verify )			{				while ( fgets( verifyBuf, 256, verify ) )				{					fgets( savedBuf, 256, saved );					if ( strcmp( verifyBuf, savedBuf ) )					{						okay = 0;						break;					}				}				fclose( saved );				fclose( verify );			}			XmlTest( "UTF-8: Verified multi-language round trip.", 1, okay );			// On most Western machines, this is an element that contains			// the word "resume" with the correct accents, in a latin encoding.			// It will be something else completely on non-wester machines,			// which is why TinyXml is switching to UTF-8.			const char latin[] = "<element>r\x82sum\x82</element>";			TiXmlDocument latinDoc;			latinDoc.Parse( latin, 0, TIXML_ENCODING_LEGACY );			text = latinDoc.FirstChildElement()->FirstChild()->ToText();			XmlTest( "Legacy encoding: Verify text element.", "r\x82sum\x82", text->Value() );		}	}			//////////////////////	// Copy and assignment	//////////////////////	printf ("\n** Copy and Assignment **\n");	{		TiXmlElement element( "foo" );		element.Parse( "<element name='value' />", 0, TIXML_ENCODING_UNKNOWN );		TiXmlElement elementCopy( element );		TiXmlElement elementAssign( "foo" );		elementAssign.Parse( "<incorrect foo='bar'/>", 0, TIXML_ENCODING_UNKNOWN );		elementAssign = element;		XmlTest( "Copy/Assign: element copy #1.", "element", elementCopy.Value() );		XmlTest( "Copy/Assign: element copy #2.", "value", elementCopy.Attribute( "name" ) );		XmlTest( "Copy/Assign: element assign #1.", "element", elementAssign.Value() );		XmlTest( "Copy/Assign: element assign #2.", "value", elementAssign.Attribute( "name" ) );		XmlTest( "Copy/Assign: element assign #3.", true, ( 0 == elementAssign.Attribute( "foo" )) );		TiXmlComment comment;		comment.Parse( "<!--comment-->", 0, TIXML_ENCODING_UNKNOWN );		TiXmlComment commentCopy( comment );		TiXmlComment commentAssign;		commentAssign = commentCopy;		XmlTest( "Copy/Assign: comment copy.", "comment", commentCopy.Value() );		XmlTest( "Copy/Assign: comment assign.", "comment", commentAssign.Value() );		TiXmlUnknown unknown;		unknown.Parse( "<[unknown]>", 0, TIXML_ENCODING_UNKNOWN );		TiXmlUnknown unknownCopy( unknown );		TiXmlUnknown unknownAssign;		unknownAssign.Parse( "incorrect", 0, TIXML_ENCODING_UNKNOWN );		unknownAssign = unknownCopy;		XmlTest( "Copy/Assign: unknown copy.", "[unknown]", unknownCopy.Value() );		XmlTest( "Copy/Assign: unknown assign.", "[unknown]", unknownAssign.Value() );				TiXmlText text( "TextNode" );		TiXmlText textCopy( text );		TiXmlText textAssign( "incorrect" );		textAssign = text;		XmlTest( "Copy/Assign: text copy.", "TextNode", textCopy.Value() );		XmlTest( "Copy/Assign: text assign.", "TextNode", textAssign.Value() );		TiXmlDeclaration dec;		dec.Parse( "<?xml version='1.0' encoding='UTF-8'?>", 0, TIXML_ENCODING_UNKNOWN );		TiXmlDeclaration decCopy( dec );		TiXmlDeclaration decAssign;		decAssign = dec;		XmlTest( "Copy/Assign: declaration copy.", "UTF-8", decCopy.Encoding() );		XmlTest( "Copy/Assign: text assign.", "UTF-8", decAssign.Encoding() );		TiXmlDocument doc;		elementCopy.InsertEndChild( textCopy );		doc.InsertEndChild( decAssign );		doc.InsertEndChild( elementCopy );		doc.InsertEndChild( unknownAssign );		TiXmlDocument docCopy( doc );		TiXmlDocument docAssign;		docAssign = docCopy;		#ifdef TIXML_USE_STL		std::string original, copy, assign;		original << doc;		copy << docCopy;		assign << docAssign;		XmlTest( "Copy/Assign: document copy.", original.c_str(), copy.c_str(), true );		XmlTest( "Copy/Assign: document assign.", original.c_str(), assign.c_str(), true );		#endif	}		//////////////////////////////////////////////////////#ifdef TIXML_USE_STL	printf ("\n** Parsing, no Condense Whitespace **\n");	TiXmlBase::SetCondenseWhiteSpace( false );	{		istringstream parse1( "<start>This  is    \ntext</start>" );		TiXmlElement text1( "text" );		parse1 >> text1;		XmlTest ( "Condense white space OFF.", "This  is    \ntext",					text1.FirstChild()->Value(),					true );	}	TiXmlBase::SetCondenseWhiteSpace( true );#endif	//////////////////////////////////////////////////////	// GetText();	{		const char* str = "<foo>This is text</foo>";		TiXmlDocument doc;		doc.Parse( str );		const TiXmlElement* element = doc.RootElement();		XmlTest( "GetText() normal use.", "This is text", element->GetText() );		str = "<foo><b>This is text</b></foo>";		doc.Clear();		doc.Parse( str );		element = doc.RootElement();		XmlTest( "GetText() contained element.", element->GetText() == 0, true );		str = "<foo>This is <b>text</b></foo>";		doc.Clear();		TiXmlBase::SetCondenseWhiteSpace( false );		doc.Parse( str );		TiXmlBase::SetCondenseWhiteSpace( true );		element = doc.RootElement();		XmlTest( "GetText() partial.", "This is ", element->GetText() );	}	//////////////////////////////////////////////////////	// CDATA	{		const char* str =	"<xmlElement>"								"<![CDATA["									"I am > the rules!\n"									"...since I make symbolic puns"								"]]>"							"</xmlElement>";		TiXmlDocument doc;		doc.Parse( str );		doc.Print();		XmlTest( "CDATA parse.", doc.FirstChildElement()->FirstChild()->Value(), 								 "I am > the rules!\n...since I make symbolic puns",								 true );		#ifdef TIXML_USE_STL		//cout << doc << '\n';		doc.Clear();

⌨️ 快捷键说明

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