采用Xerces C++执行基于schema的XML文档校验

采用Xerces C++执行基于schema的XML文档校验
作者:gobitan(雨水) 日期: 2007-04-29 转载请注明出处http://blog.csdn.net/gobitan
Xerces 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
 
 
in t main( in t argc , char ** argv )
{
       XMLPlatformUtils :: In itialize (); // 系统初始化
      
       // 创建一个 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下编译通过并执行成功。
 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gobitan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值