<?php
/*
Author: fuliang http://fuliang.iteye.com
*/
class XMLValidation{
private $xml_path;
private $schema_path;
public function __construct($xml_path,$schema_path){
$this->xml_path = $xml_path;
$this->schema_path = $schema_path;
}
function validate(){
libxml_use_internal_errors(true);
$xml = new DOMDocument();
$xml->load($this->xml_path);
if($xml->schemaValidate($this->schema_path)){
echo "The xml is valid\n";
}else{
$this->pretty_print_errors();
}
}
function pretty_print_errors(){
$errors = libxml_get_errors();
$error_count = count($errors);
echo "Total num of errors is: $error_count\n";
for($i = 0; $i < $error_count; $i++){
$this->fmt_error_with_num($i+1,$errors[$i]);
}
libxml_clear_errors();
}
function fmt_error_with_num($num, $error){
echo "Error $num: ".trim($error->message)." in file " . $error->file . " on line " .$error->line. "\n";
}
}
$xml_validation = new XMLValidation("test.xml","test.xsd");
$xml_validation->validate();
?>
test.xsd:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="stringType">
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]{6}"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="stringType" minOccurs="0"/>
<xs:element name="age" type="xs:positiveInteger"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
<xs:attribute name="person_id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
test.xml
<?xml version="1.0"?>
<person>
<name>133</name>
<age>22</age>
<address>beijing haidian</address>
<city>beijing</city>
<country>China</country>
</person>
输出结果:
引用
Error 1: Element 'person': The attribute 'person_id' is required but missing. in file /home/fuliang/program/php/test.xml on line 2
Error 2: Element 'name': [facet 'pattern'] The value '133' is not accepted by the pattern '[a-z]{6}'. in file /home/fuliang/program/php/test.xml on line 3
Error 3: Element 'name': '133' is not a valid value of the atomic type 'stringType'. in file /home/fuliang/program/php/test.xml on line 3
重新修改一下xml
<?xml version="1.0"?>
<person person_id="123">
<name>aaaaaa</name>
<age>22</age>
<address>beijing haidian</address>
<city>beijing</city>
<country>China</country>
</person>
输出信息:
引用
The xml is valid
需要注意的是行号类型是short的,超过65535就会越界,需要自己纠正这个错误。
分享到:
相关推荐
**libxml2库详解** ...总之,libxml2-2.7.4库为XML处理提供了一整套全面的解决方案,无论是解析、生成还是验证XML文件,都表现出卓越的性能和易用性。开发者可以根据项目需求,选择合适的API来高效地处理XML数据。
### C++中使用libxml2读取XML文件详解 #### 一、引言 随着XML(可扩展标记语言)在数据交换与存储领域的广泛应用,掌握如何有效地读取和解析XML文件成为了开发人员的一项必备技能。在C++环境中,libxml2库因其功能...
在"libxml2test_xml_文本解析_capturedetv_"这个项目中,我们可能看到的是一个使用libxml2库编写的测试程序,该程序可能包括以下步骤: 1. 加载XML文件:使用`xmlReadFile`或`xmlParseDoc`函数读取XML文件。 2. 遍历...
在Ubuntu操作系统中,C语言开发过程中,我们可能会遇到需要处理XML文件的需求。XML(Extensible Markup Language)是一种标记语言,广泛...在实际项目中,记得根据具体需求进行优化和扩展,确保代码的稳定性和性能。
利用libxml2生成,解析,修改xml文件示例,安装libxml2库, sudo apt-...使用libxml2库进行xml文件的操作,取出了平台差异化,便于在不同的平台都可以进行文件的操作,不受平台系统的限制,可以实现一次编码,多次编译
本程序是用C语言基于cjson库libxml2库编写的XML与JSON互转
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于网络数据交换、文档存储以及配置文件等领域。...通过理解和使用LibXML,开发者可以更有效地处理XML文档,提高应用程序的灵活性和互操作性。
由于XML注入攻击的可能性,使用libxml2时应确保输入的数据经过适当验证和清理,防止恶意构造的XML文档导致安全问题。 总结来说,libxml2是C语言中处理XML的强大工具,通过其提供的API,开发者可以高效地解析、操作...
东西不算新东西,全部是从别人那里盗过来的 但代码都亲自进行了调试,并将他人的测试桩都补充的相当完整,并重写了Makefile
libxml2是 GNOME 项目开发的一个强大的开源XML处理库,它提供了多种功能,包括XML文档的解析、验证、序列化以及XPath、XInclude、XPointer和XML Schema支持。本教程将深入讲解如何利用libxml2库在C++环境中进行XML...
3. **XML Schema验证**:可以验证XML文档是否符合指定的XML Schema规范。 4. **XML编码转换**:libxml2库包含各种字符编码的转换函数,确保XML文档在不同编码环境中的兼容性。 5. **内存管理**:libxml2提供了一套...
在Windows环境下,使用libxml库解析XML文档是一个常见的任务,特别是在进行数据处理、网络通信或者软件开发时。libxml2是 GNOME 项目的一个组件,它是一个功能强大的XML解析库,支持多种操作系统,包括Windows。本...
这个库不仅支持XML,还支持HTML、XHTML、SVG等多种格式,并且包含了XML解析、XPath处理、XML Schema验证等功能。libxml2-2.7.7是该库的一个特定版本,可能包含了一些特定的改进和修复。 ** 安装包内容** 这个...
这通常意味着该教程会涵盖XML的基本概念,以及如何利用libxml2库提供的API进行XML解析和操作,同时简化了这些操作的复杂性,便于学习和实践。 **标签:“xml”:** “xml”标签明确了讨论的主题是XML(可扩展标记...
4. **XML Schema验证**:libxml2可以验证XML文档是否符合预先定义的XML Schema,确保数据的正确性和一致性。 5. **HTML处理**:除了XML,libxml2还支持HTML解析,允许开发者在处理Web内容时使用相同的方法和接口。 ...
4. **DTD和XML Schema验证**:libxml2可以验证XML文档是否符合指定的DTD或XML Schema,通过`xmlValidateDtd()`和`xmlSchemaValidateDoc()`等函数。 5. **内存管理**:libxml2提供了一套完整的内存管理机制,包括...
- Libxml还支持XML Schema和Relax NG验证,以及DTD(文档类型定义)验证。 2. **Visual Studio 2008:** - Microsoft 的 Visual Studio 是一个强大的开发工具集,2008版本支持C++, C#, VB.NET等多种编程语言。 -...
- **XML Schema和DTD验证**:支持XML Schema和DTD(Document Type Definition)文档的验证,确保XML文档符合预定义的结构规则。 - **命名空间**:处理XML文档中的命名空间,确保元素和属性的唯一性。 ### 2. 使用...
**libxml2库详解** Libxml2是XML处理的一个强大且高效的开源库,它由Gnome...通过学习和使用libxml2-2.9.14源码,开发者不仅可以掌握XML处理的基础知识,还能深入了解XML技术在实际项目中的应用,提升自己的编程技能。
4. **XML Schema验证**:libxml2可以对XML文档进行Schema验证,确保其符合预定义的规范。 5. **命名空间支持**:libxml2处理XML命名空间,使处理带有相同标签但属于不同命名空间的元素变得简单。 6. **编码转换**:...