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

📄 markupdlg.cpp

📁 最有名的一个VC++外部类,Cmarkup,现在已经出了最新版8.2了,现在网上的都是6.1以下的版,希望这个新版对你们有所帮助,一些相用VC开发VML的朋友千万不要错过
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		_T("<!ATTLIST PARSETEST v CDATA \"\" s CDATA \"\">\n")
		_T("<!ELEMENT ITEM ANY>\n")
		_T("<!ATTLIST ITEM note CDATA \"\">\n")
		_T("]>\n")
		_T("<PARSETEST v=\"1\" s=\'6\'>\n")
			_T("<!--- </P>& special chars -->\n")
			_T("<ITEM note=\"Here&apos;s to &quot;us&quot;\"/>\n")
			_T("<ITEM note=\"see data\">Here's to \"us\"</ITEM>\n")
		_T("</PARSETEST>\n")
		;
	Check( xml.SetDoc( csPTDoc ) );
	Check( xml.FindChildElem() );
	Check( xml.GetAttrib( _T("v") ) == _T("1") );
	Check( xml.GetAttribName(0) == _T("v") );
	Check( xml.GetAttribName(1) == _T("s") );
	Check( xml.GetAttribName(2) == _T("") );
	Check( xml.GetChildAttrib(_T("note")) == _T("Here's to \"us\"") );
	Check( xml.IntoElem() );
	Check( xml.FindElem() );
	Check( xml.GetData() == _T("Here's to \"us\"") );

#if ! defined( MARKUP_MSXML )
	// Save Restore Position Test
	StartCheckZone( _T("Save Restore Position Test") );
	xml.SetDoc( NULL );
	xml.AddElem( _T("SavePosTest") );
	Check( ! xml.RestorePos() ); // crash in 6.6 and 7.x when no saved pos yet
	xml.IntoElem(); // no main position
	xml.SavePos();
	xml.ResetPos();
	xml.RestorePos();
	Check( xml.OutOfElem() );
	Check( xml.GetTagName() == "SavePosTest" );
	CStringArray csaPosNames;
	int nSavePos;
	const int nSavePosTestSize = 100;
	for ( nSavePos=0; nSavePos<nSavePosTestSize; ++nSavePos )
	{
		// Find an unused random name
		CString csPosName;
		while ( 1 )
		{
			int nPosNameLen = RandInt(10)+1;
			for ( int nPosNameChar=0; nPosNameChar<nPosNameLen; ++nPosNameChar )
				csPosName += (_TCHAR)(_T('A')+RandInt(26));
			if ( ! xml.RestorePos(csPosName) )
				break;
		}
		xml.AddChildElem( csPosName );
		xml.SavePos( csPosName );
		csaPosNames.Add( csPosName );
	}
	xml2 = xml;
	xml = xml2;
	for ( nSavePos=0; nSavePos<csaPosNames.GetSize(); ++nSavePos )
	{
		Check( xml.RestorePos(csaPosNames[nSavePos]) );
		Check( xml.GetChildTagName() == (LPCTSTR)csaPosNames[nSavePos] );

		// Move saved position to TEMP2 child
		Check( xml.IntoElem() );
		Check( xml.AddChildElem( _T("TEMP") ) );
		Check( xml.IntoElem() );
		Check( xml.AddChildElem( _T("TEMP2") ) );
		Check( xml.IntoElem() );
		xml.SavePos( csaPosNames[nSavePos] );
		if ( RandInt(2) ) // 1 in 2
			Check( xml.OutOfElem() );
		if ( RandInt(2) ) // 1 in 2
			Check( xml.OutOfElem() );
		if ( nSavePos % 2 )
			xml.RemoveElem();
	}
	for ( nSavePos=0; nSavePos<csaPosNames.GetSize(); ++nSavePos )
	{
		if ( nSavePos % 2 )
			Check( ! xml.RestorePos(csaPosNames[nSavePos]) );
		else
		{
			Check( xml.RestorePos(csaPosNames[nSavePos]) );
			Check( xml.OutOfElem() );
			Check( xml.OutOfElem() );
			Check( xml.GetTagName() == (LPCTSTR)csaPosNames[nSavePos] );
		}
	}

	// Save Restore Example
	int anSomeData[] = { 10, 30, 50, 20, 90, 0 };
	int nD;
	StartCheckZone( _T("Save Restore Example") );
	xml.SetDoc( NULL );
	xml.AddElem( _T("SavePosExample") );
	xml.IntoElem(); // no main position
	xml.AddElem( _T("Total") );
	xml.SavePos( _T("Total") );
	xml.AddElem( _T("Data") );
	xml.SavePos( _T("Data") );
	for ( nD=0; anSomeData[nD]; ++nD )
	{
		xml.RestorePos( _T("Total") );
		xml.SetData( _ttoi(_CSTR(xml.GetData())) + anSomeData[nD] );
		xml.RestorePos( _T("Data") );
		xml.AddChildElem( _T("Value"), anSomeData[nD] );
	}
	xml2.SetDoc( NULL );
	xml2.AddElem( _T("SavePosExample") );
	xml2.IntoElem();
	xml2.AddElem( _T("Total") );
	xml2.AddElem( _T("Data") );
	for ( nD=0; anSomeData[nD]; ++nD )
	{
		xml2.ResetMainPos();
		xml2.FindElem();
		xml2.SetData( _ttoi(_CSTR(xml2.GetData())) + anSomeData[nD] );
		xml2.FindElem();
		xml2.AddChildElem( _T("Value"), anSomeData[nD] );
	}
	Check( xml.GetDoc() == xml2.GetDoc() );

	// Prepend XML Declaration test
	// (not implemented in MSXML because modifying XML Declaration is restricted)
	StartCheckZone( _T("Prepend XML Declaration") );
	Check( ! xml.SetDoc( _T("<?xml version=\"1.0\"?>\r\n") ) );
	Check( xml.AddElem( _T("ROOT") ) );
	Check( xml.IntoElem() );
	Check( xml.AddElem( _T("CHILD") ) );
	xml.ResetPos();
	Check( xml.FindElem( _T("ROOT") ) );
	Check( xml.FindChildElem( _T("CHILD") ) );

	// Copy Constructor Test (not MSXML!)
	StartCheckZone( _T("Copy Constructor Test non-MSXML") );
	xml.SetDoc( NULL );
	xml2 = xml;
	xml.AddElem( _T("R") );
	xml.AddChildElem( _T("C") );
	xml2 = xml;
	xml2.FindChildElem();
	Check( xml2.GetChildTagName() == xml.GetChildTagName() );

	// Ill-formed Markup Test
	StartCheckZone( _T("Ill-formed Markup Test") );
	Check( ! xml.SetDoc( _T("<P>Hello<BR>Hi") ) );
	Check( xml.FindElem( _T("P") ) );
	Check( xml.FindNode() == xml.MNT_TEXT );
	Check( xml.GetData() == _T("Hello") );
	Check( xml.FindElem( _T("BR") ) );
	Check( xml.FindNode() == xml.MNT_TEXT );
	Check( xml.GetData() == _T("Hi") );
	Check( xml.AddElem( _T("P"), _T("Hola") ) );
	Check( xml.GetData() == _T("Hola") );
	Check( ! xml.SetDoc( _T("<P>Hello<BR>Hi</P>") ) );
	Check( xml.FindElem( _T("P") ) );
	xml.SetDocFlags( xml.MDF_IGNORECASE );
	Check( xml.SetDoc( _T("<A></a>") ) );
	Check( xml.FindElem( _T("a") ) );
	Check( xml.SetAttrib( _T("a1"), _T("V1") ) );
	Check( xml.SetAttrib( _T("A1"), _T("v1") ) );
	Check( ! xml.AddSubDoc( _T("<b>") ) );
	xml.ResetPos();
	Check( xml.FindElem( _T("a") ) );
	Check( xml.GetAttrib(_T("A1")) == _T("v1") );
	Check( xml.GetAttrib(_T("a1")) == _T("v1") );
	Check( xml.FindElem( _T("B") ) );
	xml.SetDocFlags( 0 );
	Check( ! xml.SetDoc( _T("<A><B></C></B></A>") ) );
	Check( xml.FindElem() );
	Check( xml.IntoElem() );
	Check( xml.FindElem( _T("B") ) );
	Check( xml.IntoElem() );
	Check( xml.FindNode() == xml.MNT_LONE_END_TAG );
	Check( xml.GetTagName() == _T("C") );
	Check( xml.GetData() == _T("C") );
	Check( xml.OutOfElem() );
	Check( xml.SetElemContent( _T("data") ) );
	Check( ! xml.InsertSubDoc( _T("<S/><S/>") ) );
	Check( ! xml.SetElemContent( _T("<SC>") ) );
	Check( xml.FindElem( _T("S") ) );

	// Multi-Rooted Subdoc Test
	StartCheckZone( _T("Multi-Rooted Subdoc Test") );
	Check( xml.SetElemContent( _T("<SC><SCC/></SC><SC><SCC/></SC><SC/>") ) );
	Check( xml.FindChildElem( _T("SC") ) );
	Check( xml.SetChildAttrib( _T("asc"), _T("verbose") ) );
	Check( xml.IntoElem() );
	Check( xml.FindChildElem( _T("SCC") ) );
	Check( xml.SetChildAttrib( _T("ascc"), _T("verbose") ) );
	Check( xml.OutOfElem() );
	xml.ResetMainPos();
	Check( xml.FindElem( _T("S") ) );
	Check( xml.FindChildElem( _T("SC") ) );
	Check( xml.SetChildAttrib( _T("asc"), _T("verbose") ) );
	Check( xml.SetChildAttrib( _T("asc2"), 2 ) );
	Check( xml.FindElem( _T("S") ) );
	Check( xml.FindChildElem( _T("SC") ) );
	Check( xml.FindChildElem( _T("SC") ) );
	Check( xml.FindElem( _T("B") ) );

	// Don't mistake end slash on non-quoted value for empty element (see cDminus2)
	StartCheckZone( _T("Non Quoted Attribute Test") );
	Check( xml.SetDoc( _T("<A href=/path/>ok</A>") ) );
	Check( xml.FindElem() );
	Check( xml.GetAttrib(_T("href")) == _T("/path/") );

	// AddElem Flags Test
	StartCheckZone( _T("AddElem Flags Test") );
	xml.SetDoc( NULL );
	xml.AddElem( _T("ROOT"), NULL, xml.MNF_WITHNOLINES );
	xml.AddChildElem( _T("A"), _T(""), xml.MNF_WITHNOEND|xml.MNF_WITHNOLINES );
	Check( xml.IntoElem() );
	Check( xml.AddElem( _T("A"), _T(""), xml.MNF_WITHNOEND ) );
	Check( xml.AddChildElem( _T("B") ) );
	Check( xml.AddChildElem( _T("B"), _T("D") ) );
	Check( xml.OutOfElem() );
	xml.AddChildElem( _T("BR"), _T(""), xml.MNF_WITHXHTMLSPACE );
	xml.SetChildAttrib( _T("class"), _T("MinorBrk") );
	Check( ! xml.SetDoc( _T("<A>test") ) );
	Check( xml.FindElem() );
	Check( xml.FindNode() == xml.MNT_TEXT );
	Check( xml.GetData() == _T("test") );
	Check( ! xml.SetDoc( _T("<A>test\r\n") ) );
	Check( xml.FindElem() );
	Check( xml.FindNode() == xml.MNT_TEXT );
	Check( TruncToLastEOL(_CSTR(xml.GetData())) == _T("test") );
	Check( ! xml.SetDoc( _T("<A>test\r\n  <B>okay") ) );
	Check( xml.FindElem() );
	Check( xml.FindNode() == xml.MNT_TEXT );
	Check( TruncToLastEOL(_CSTR(xml.GetData())) == _T("test") );
	Check( xml.FindElem() );
	Check( xml.FindNode() == xml.MNT_TEXT );
	Check( TruncToLastEOL(_CSTR(xml.GetData())) == _T("okay") );
	xml.ResetMainPos();
	Check( xml.FindElem() );
	Check( xml.SetData(_T("t2")) );
	Check( xml.GetData() == _T("t2") );
	Check( xml.SetData(_T("test3")) );
	Check( xml.GetData() == _T("test3") );
	xml.SetDoc( NULL );
	xml.AddElem( _T("P"), _T(""), xml.MNF_WITHNOLINES );
	xml.IntoElem();
	Check( xml.AddNode( xml.MNT_TEXT, _T("First line") ) );
	Check( xml.AddElem( _T("BR"), _T(""), xml.MNF_WITHNOEND | xml.MNF_WITHNOLINES ) );
	Check( xml.AddNode( xml.MNT_TEXT, _T("Second line") ) );
	Check( xml.GetDoc() == _T("<P>First line<BR>Second line</P>") );
	xml.OutOfElem();
	xml.SetElemContent( _T("First line<BR>Second line") );
	Check( xml.GetDoc() == _T("<P>First line<BR>Second line</P>") );

	// Ill-formed SubDoc Fragment Test
	StartCheckZone( _T("SubDoc Fragment Test") );
	Check( ! xml.SetDoc( _T("<A/><B/>") ) );
	Check( ! xml.SetDoc( _T(" something ") ) );
	Check( ! xml.AddSubDoc( _T("<A>") ) );
	Check( ! xml.AddSubDoc( _T("<B>") ) );
	Check( ! xml.AddSubDoc( _T("</A>") ) ); // lone end tag
	Check( xml.AddSubDoc( _T("<C/>") ) );
	Check( ! xml.SetElemContent( _T("<CC>") ) );
	Check( xml.GetTagName() == _T("C") );
	Check( xml.FindChildElem() );
	Check( xml.GetChildTagName() == _T("CC") );
	Check( xml.SetElemContent( _T("d") ) );
	Check( xml.GetData() == _T("d") );
	Check( ! xml.SetElemContent( _T("<DD>") ) );
	Check( xml.FindChildElem() );
	Check( xml.GetChildTagName() == _T("DD") );

	// Replace element between two text nodes
	StartCheckZone( _T("Replace Element Test") );
	Check( xml.SetDoc( _T("T<A/>T") ) );
	Check( xml.FindElem( _T("A") ) );
	Check( xml.RemoveNode() );
	Check( xml.GetNodeType() == xml.MNT_TEXT );
	Check( xml.GetData() == _T("T") );
	Check( xml.AddNode( xml.MNT_ELEMENT, _T("B") ) );
	Check( xml.SetAttrib( _T("v"), 1 ) );
	Check( xml.GetTagName() == _T("B") );
	Check( xml.GetAttrib( _T("v") ) == _T("1") );
	Check( xml.IntoElem() );
	Check( xml.AddNode( xml.MNT_TEXT, _T("T0") ) );
	Check( xml.AddNode( xml.MNT_ELEMENT, _T("C1") ) );
	Check( xml.AddNode( xml.MNT_TEXT, _T("T1") ) );
	Check( xml.AddNode( xml.MNT_ELEMENT, _T("C2") ) );
	Check( xml.AddNode( xml.MNT_TEXT, _T("T2") ) );
	xml.ResetMainPos();
	Check( xml.FindElem( _T("C1") ) );
	Check( xml.RemoveNode() );
	Check( xml.GetNodeType() == xml.MNT_TEXT );
	Check( xml.GetData() == _T("T0") );
	Check( xml.AddNode( xml.MNT_ELEMENT, _T("C1") ) );
	Check( xml.FindElem( _T("C2") ) );
	Check( xml.RemoveNode() );
	Check( xml.GetNodeType() == xml.MNT_TEXT );
	Check( xml.GetData() == _T("T1") );
	Check( xml.AddNode( xml.MNT_ELEMENT, _T("C2") ) );
	Check( xml.FindNode() == xml.MNT_TEXT );
	Check( xml.GetData() == _T("T2") );
	xml.ResetMainPos();
	Check( xml.FindElem( _T("C2") ) );
	Check( xml.IntoElem() );
	Check( xml.AddNode( xml.MNT_ELEMENT, _T("D3") ) );
	Check( xml.AddNode( xml.MNT_TEXT, _T("T0") ) );
	Check( xml.AddNode( xml.MNT_ELEMENT, _T("D4") ) );
	Check( xml.IntoElem() );
	Check( xml.AddNode( xml.MNT_ELEMENT, _T("E1") ) );
	Check( xml.SetData( _T("X") ) );
	Check( xml.OutOfElem() );
	Check( xml.OutOfElem() );
	xml.ResetMainPos();
	Check( xml.FindElem() );
	Check( xml.GetTagName() == _T("C1") );
	Check( xml.IntoElem() );
	Check( xml.AddNode( xml.MNT_TEXT, _T("T1") ) );
	Check( xml.AddNode( xml.MNT_ELEMENT, _T("D2") ) );
	Check( xml.AddNode( xml.MNT_TEXT, _T("T2") ) );
	xml.ResetMainPos();
	Check( xml.FindElem() );
	Check( xml.GetTagName() == _T("D2") );
	xml.ResetMainPos();
	Check( xml.InsertNode( xml.MNT_ELEMENT, _T("D1") ) );
	Check( xml.InsertNode( xml.MNT_TEXT, _T("TEST") ) );
	Check( xml.SetData( _T("T0") ) );
	Check( xml.FindNode() == xml.MNT_ELEMENT );
	Check( xml.SetData( _T("X") ) );
	Check( xml.FindElem( _T("D2") ) );
	xml.ResetMainPos();
	Check( xml.FindNode() == xml.MNT_TEXT );
	Check( xml.GetData() == _T("T0") );
	Check( xml.OutOfElem() );
	xml.ResetMainPos();
	Check( xml.FindElem( _T("C2") ) );
	Check( xml.IntoElem() );
	Check( xml.FindNode() == xml.MNT_ELEMENT );
	Check( xml.GetTagName() == _T("D3") );
	Check( xml.FindNode() == xml.MNT_TEXT );
	Check( xml.GetData() == _T("T0") );
	Check( xml.FindNode() == xml.MNT_ELEMENT );
	Check( xml.GetTagName() == _T("D4") );
	Check( xml.FindChildElem() );
	Check( xml.GetChildData() == _T("X") );

	// With Entities Test
	StartCheckZone( _T("With Entities Test") );
	xml.SetDoc(NULL);
	Check( xml.AddElem( _T("A"), _T("&#x20;"), xml.MNF_WITHREFS ) );
	Check( xml.GetData() == _T(" ") );
	Check( xml.AddChildElem( _T("CH"), _T("&amp;"), xml.MNF_WITHREFS ) );
	Check( xml.GetChildData() == _T("&") );
	Check( xml.SetChildData( _T("&#32;"), xml.MNF_WITHREFS ) );
	Check( xml.GetChildData() == _T(" ") );
	Check( xml.SetChildData( _T("&"), xml.MNF_WITHREFS ) );
	Check( xml.GetChildData() == _T("&") );
	Check( xml.SetChildData( _T("&&"), xml.MNF_WITHREFS ) );
	Check( xml.GetChildData() == _T("&&") );
	Check( xml.SetChildData( _T("&#3 2"), xml.MNF_WITHREFS ) );
	Check( xml.GetChildData() == _T("&#3 2") );
	Check( xml.EscapeText( _T("&#3 2"), xml.MNF_WITHREFS ) == _T("&amp;#3 2") );
	Check( xml.EscapeText( _T("\""), xml.MNF_ESCAPEQUOTES ) == _T("&quot;") );
	Check( xml.EscapeText( _T("\"") ) == _T("\"") );
	Check( xml.EscapeText( _T("&#32;\'"), xml.MNF_WITHREFS|xml.MNF_ESCAPEQUOTES ) == _T("&#32;&apos;") );

	// Node Error Test -- even gibberish will not stop node navigation
	// But there is no guaranteed node parsing system with gibberish
	StartCheckZone( _T("Node Error Test") );
	Check( ! xml.SetDoc( _T("<) <> <*  ><<>>") ) );
	BOOL bReachedEndOfGibberish = FALSE;
	int nGibberishNodes = 0;
	while ( nGibberishNodes < 100 )
	{
		int nGNType = xml.FindNode();
		if ( nGNType == 0 )
		{
			bReachedEndOfGibberish = TRUE;
			break;
		}
		else if ( nGNType == xml.MNT_NODE_ERROR )
		{
			CString csJunkNode = _CSTR(xml.GetData());
			Check( ! csJunkNode.IsEmpty() );
		}
		++nGibberishNodes;
	}
	Check( bReachedEndOfGibberish );
#endif

	// Character Reference Test, check various character decoding issues
	StartCheckZone( _T("Character Reference Test") );
	Check( xml.SetDoc(
		_T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
		_T("<CHAR v='C&#34;&#x22;S'>\n")
		_T("<CORE>&#60;&#x3c;&#62;&#x3e;&#38;&#x26;&#39;&#x27;&#34;&#x22;</CORE>\n")
		_T("<SPACE xml:space=\"preserve\">&#32;&#x20;&#9;&#x9;&#10;&#xa;</SPACE>\n")
		_T("<REF>&#20013;&#22269;&#20154;</REF>\n")
		_T("</CHAR>\n")
		) );
	Check( xml.FindChildElem(_T("CORE")) );
	Check( xml.GetAttrib( _T("v") ) == _T("C\"\"S") );
	Check( xml.GetChildData() == _T("<<>>&&''\"\"") );
	Check( xml.FindChildElem(_T("SPACE")) );
	Check( xml.GetChildData() == _T("  \t\t\n\n") );
	Check( xml.FindChildElem(_T("REF")) );
#if defined( _UNICODE )
	Check( xml.GetChildData() == _T("\x4E2D\x56FD\x4EBA") );
#elif defined( _MBCS )
	setlocale( LC_ALL, "C" );
	if ( setlocale(LC_CTYPE,".936") ) // is GB2312 DBCS code page available?
		Check( xml.GetChildData() == _T("\xD6\xD0\xB9\xFA\xC8\xCB") ); // DBCS
	else
		Check( xml.GetChildData() == _T("&#20013;&#22269;&#20154;") ); // unmodified
#elif ! defined( MARKUP_MSXML )
	// UTF-8 (note: MSXML converts chinese character reference to UCS-2, but not UTF-8)
	Check( xml.GetChildData() == _T("\xE4\xB8\xAD\xE5\x9B\xBD\xE4\xBA\xBA") );
#endif

#if defined( _MBCS )
	// GB2312 Test, check getting and setting of sample GB2312 chars
	StartCheckZone( _T("GB2312 Test") );
	CString csSampleGB2312Chars = _T("\xD6\xD0\xB9\xFA\xC8\xCB");

⌨️ 快捷键说明

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