採用Xerces C++執行基於schema的XML文檔校正

來源:互聯網
上載者:User
採用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下編譯通過並執行成功。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.