Visual C++ Examples

ChilkatHOMEASPVisual BasicVB.NETC#Visual C++CMFCDelphiFoxProJavaPerlPHPPythonRubySQL ServerVBScript

Visual C++ Examples

CkString
Byte Array
Bounced Mail
Character Encoding
Digital Certificates
Digital Signatures
Email
Encryption
FTP
HTML-to-XML
HTTP
IMAP
MHT / HTML Email
RSA Encryption
S/MIME
Socket
Spider
Tar
Upload
XML
XMP
Zip Compression


More Examples...
Email Object
POP3
SMTP
RSS
Atom
Self-Extractor
Service
PPMD
Deflate
DH Key Exchange
DSA

Unreleased...
Bzip2
LZW
Bz2
Icon

 

 

 

 

 

 

 

 

Deleting Nodes from an XML Document Tree

Download Chilkat C++ Libraries for VC++ 8.0 / Win32

Download Chilkat C++ Libraries for VC++ 7.0 / Win32

Download Chilkat C++ Libraries for VC++ 6.0 / Win32

Source Code Listing

// Delete Keyword nodes from the XML Document (crisp.xml), and
// add them to a new document where the keyword
// is the tag, without duplicates.
void RemoveKeywords(void)
    {
    // Load the input document.
    CkXml xml;
    xml.LoadXmlFile("crisp.xml");

    // Create the output XML document in-memory
    CkXml outXml;
    outXml.put_Tag("unique_keywords");

    // Iterate over the "DOC" nodes by calling FirstChild
    // followed by NextSibling2 repeatedly until it returns false.
    CkXml *node = xml.FirstChild();
    while (node)
	{
	// Iterate over the Keyword nodes, remove each, and add it to 
	// our new XML document. (Note that the search happens at the
	// subtree rooted at our current node, and not the entire XML document.)
	CkXml *kNode = node->SearchForTag(0,"Keyword");
	while (kNode)
	    {
	    // Get the keyword and prep it to become a tag.
	    CkString tagStr;
	    kNode->get_Content(tagStr);
	    tagStr.trim2();
	    tagStr.replaceAllOccurances(" ","_");
	    tagStr.removeCharOccurances('/');
	    tagStr.removeCharOccurances('(');
	    tagStr.removeCharOccurances(')');
	    tagStr.removeCharOccurances('+');
	    tagStr.removeCharOccurances('\'');
	    tagStr.removeCharOccurances('=');
	    tagStr.removeCharOccurances('"');
	    // Tags cannot begin with numerics.
	    if (tagStr.charAt(0) <= '9' && tagStr.charAt(0) >= '0')
		{
		tagStr.prepend("A_");
		}

	    // Only add the new node if the keyword doesn't already exist.
	    CkXml *tempNode = outXml.FindOrAddNewChild(tagStr.getString());
	    delete tempNode;

	    // Move forward to the next Keyword
	    CkXml *curNode = kNode;
	    kNode = node->SearchForTag(curNode,"Keyword");

	    // Remove the keyword that was just processed from the XML document.
	    curNode->RemoveFromTree();
	    delete curNode;
	    }

	// Move to the next sibling. The internal reference within node is updated
	// to the node's next sibling. If no siblings remain, it returns false.
	if (!node->NextSibling2())
	    {
	    delete node;
	    node = 0;
	    }
	}

    // Save the unique keywords.
    outXml.SaveXml("UniqueKeywords.xml");

    // Save the original document with all the keywords removed.
    xml.SaveXml("KeywordsRemoved.xml");

    return;
    }



 

 

Need a specific example? Send a request to support@chilkatsoft.com

© 2000-2008 Chilkat Software, Inc. All Rights Reserved.

Mail Component · .NET Mail Component · XML Parser