採用Xerces C++執行基於schema的XML文檔校正作者:gobitan(雨水) 日期: 2007-04-29 轉載請註明出處http://blog.csdn.net/gobitanXerces C++是Apache軟體基金會下的一個XML解析器項目,該項目也有Java版的。它是目前功能最為強大的XML解析器,廣泛應用於各類項目。本文介紹了如何利用Xerces C++對XML文檔執行schema校正。由於本文只是重點強調該功能的使用,為了簡單明了將執行個體中的代碼進行了精簡,去掉了很多異常考慮等其他特性。要對一個XML文檔執行schema校正,那麼首先得準備好一份XML文檔和該文檔對應的含有schema定義的xsd文檔。gobitan.xml檔案<?xml version="1.0" encoding="UTF-8"?><phonebook xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="gobitan.xsd"> <name> <first>Tom</first> <last>Jones</last> </name><phone type="home">420-203-2032</phone></phonebook> gobitan.xsd檔案 <?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="phonebook"> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="1" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="first" type="xs:string"/> <xs:element name="last" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="phone" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="type" type="xs:string"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element></xs:schema> 代碼檔案validate.cpp#include<stdio.h>#include<xercesc/sax2/XMLReaderFactory.hpp> XERCES_CPP_NAMESPACE_USE int main( intargc , char** argv ){ XMLPlatformUtils::Initialize(); //系統初始化 //建立一個XML閱讀器 SAX2XMLReader* parser = XMLReaderFactory::createXMLReader(); //設定閱讀器選項 parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true); parser->setFeature(XMLUni::fgSAX2CoreNameSpacePrefixes, true); parser->setFeature(XMLUni::fgXercesValidationErrorAsFatal, true); parser->setFeature(XMLUni::fgSAX2CoreValidation, true); parser->setFeature(XMLUni::fgXercesSchema, true); parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true); //載入XSD檔案 Grammar *gra= parser->loadGrammar ("gobitan.xsd", Grammar::SchemaGrammarType, true); parser->setFeature (XMLUni::fgXercesUseCachedGrammarInParse, true); //載入XML檔案並執行schema校正 parser->parse("gobitan.xml"); //判斷校正是否成功 if (0 == parser->getErrorCount()) { printf("validation succeed!/n"); } else { printf("validation failed! /n"); } //系統清理 XMLPlatformUtils::Terminate(); return 0;} 注意xsd和xml檔案均放在工程檔案目錄下即可。 上面的代碼很簡單一看就明了,就不多解釋了。寫出來的目的是跟大家分享,節約大家的時間,因為真正你需要的時候自己去解決也肯定能弄出來,但那要花很多時間。上面的代碼就是我摸索出來的,花了我大半天的時間,網上很難找到對口的例子。你可以修改xml文檔來判斷校正是否真的有效。上面程式在需要Xerces C++的標頭檔和lib庫,在VC6.0下編譯通過並執行成功。