JBPM流程部署校验之javascript利用XSD校验XML
2023-09-27 14:28:03 时间
JBPM流程定义校验之javascript利用XSD校验XML
上篇我们简单的介绍了一下XSD的相关知识,今天我们来学习一下在javascript中怎样利用XSD来验证xml;现在各大浏览器厂商中,好像就微软公布了相应的接口,其他的厂商需要我们自己来实现类库;所以今天我们讲的是在IE下利用XSD来验证xml。
我们先了解一下MSXML个版本对XML验证的支持情况
Version | Support |
---|---|
MSXML | 仅支持 DTD 验证,不支持xsd方式. |
MSXML 2.0 through 4.0 | 支持 XML-Data Reduced (XDR) 验证. |
MSXML 4.0 and later | 支持xsd验证方式. |
MSXML 5.0 for Microsoft Office Applications | 支持内联xsd验证. |
MSXML 6.0 | 移除 XML-Data Reduced (XDR) 验证方式. |
从图中我们可以看到从MSXML4以后的版本就都支持直接利用XSD来验证xml了,试了一下,高版本的抛出的错误信息更精确和详细。
MSXML支持两种方式的验证,一种是将xsd直接嵌入到xml文件中(内联xsd),一种是验证是动态的指定XSD文件;
校验类库
WFTH
=
{};
var xsdValidationManager = WFTH.XSDValidationManager = {
validationWithXSD: function (xmlFilePath, xsdFilePath, nameSpace) {
var xd = new ActiveXObject( " MSXML2.DOMDocument.6.0 " );
// 直接指定使用的xsd文件,否则需要内联xsd文件
if (arguments.length == 3 && xsdFilePath != null && xsdFilePath != undefined) {
var xs = new ActiveXObject( " MSXML2.XMLSchemaCache.6.0 " );
xs.add(nameSpace, xsdFilePath);
xd.schemas = xs;
} ;
xd.async = false ;
xd.validateOnParse = true ;
xd.resolveExternals = true ;
xd.load(xmlFilePath);
if (xd.parseError.errorCode != 0 ) {
return ( " Validation failed on " + xmlFilePath + " \n===================== " + " \nReason: " + xd.parseError.reason + " \nSource: " + xd.parseError.srcText + " \nLine: " + xd.parseError.line + " \n " );
}
else
return ( " Validation succeeded for " + xmlFilePath + " \n======================\n " + xd.xml + " \n " );
}
};
var xsdValidationManager = WFTH.XSDValidationManager = {
validationWithXSD: function (xmlFilePath, xsdFilePath, nameSpace) {
var xd = new ActiveXObject( " MSXML2.DOMDocument.6.0 " );
// 直接指定使用的xsd文件,否则需要内联xsd文件
if (arguments.length == 3 && xsdFilePath != null && xsdFilePath != undefined) {
var xs = new ActiveXObject( " MSXML2.XMLSchemaCache.6.0 " );
xs.add(nameSpace, xsdFilePath);
xd.schemas = xs;
} ;
xd.async = false ;
xd.validateOnParse = true ;
xd.resolveExternals = true ;
xd.load(xmlFilePath);
if (xd.parseError.errorCode != 0 ) {
return ( " Validation failed on " + xmlFilePath + " \n===================== " + " \nReason: " + xd.parseError.reason + " \nSource: " + xd.parseError.srcText + " \nLine: " + xd.parseError.line + " \n " );
}
else
return ( " Validation succeeded for " + xmlFilePath + " \n======================\n " + xd.xml + " \n " );
}
};
客户端调用
//独立的xml和xsd
alert(xsdValidationManager.validationWithXSD(
"
a.xml
"
,
"
note.xsd
"
,
"http://www.w3school.com.cn/"
));
//内联xsd
alert(xsdValidationManager.validationWithXSD( " a.xml " ));
alert(xsdValidationManager.validationWithXSD( " a.xml " ));
附xsd及xml实例
内联模式之指定了命名空间
//xsd文件
<? xml version = " 1.0 " ?>
< note xmlns = " http://www.w3school.com.cn " xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation = " http://www.w3school.com.cn note.xsd " >
< to > George < / to>
< from > John < / from>
< heading > Reminder < / heading>
< body > Don ' t forget the meeting!</body>
<name></name>
</note>
//xsd文件
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<? xml version = " 1.0 " ?>
< note xmlns = " http://www.w3school.com.cn " xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation = " http://www.w3school.com.cn note.xsd " >
< to > George < / to>
< from > John < / from>
< heading > Reminder < / heading>
< body > Don ' t forget the meeting!</body>
<name></name>
</note>
//xsd文件
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
内联模式之无命名空间
//xml文件
<?
xml version
=
"
1.0
"
?>
< note xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi:noNamespaceSchemaLocation = " note.xsd " >
< to > George < / to>
< from > John < / from>
< heading > Reminder < / heading>
< body > Don ' t forget the meeting!</body>
<name></name>
</note>
//xsd文件
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
< note xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi:noNamespaceSchemaLocation = " note.xsd " >
< to > George < / to>
< from > John < / from>
< heading > Reminder < / heading>
< body > Don ' t forget the meeting!</body>
<name></name>
</note>
//xsd文件
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
单独的xsd和xml文件
//xml
<?
xml version
=
"
1.0
"
?>
< note xmlns = " http://www.w3school.com.cn " >
< to > George < / to>
< from > John < / from>
< heading > Reminder < / heading>
< body > Don ' t forget the meeting!</body>
<name></name>
</note>
//xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
< note xmlns = " http://www.w3school.com.cn " >
< to > George < / to>
< from > John < / from>
< heading > Reminder < / heading>
< body > Don ' t forget the meeting!</body>
<name></name>
</note>
//xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
相关文章
- 高性能Javascript--高效的数据访问
- JavaScript - 连接合并两个或多个一维数组(最简单的方式)
- JavaScript进阶系列01,函数的声明,函数参数,函数闭包
- 《JavaScript启示录》——1.11 原始值(String、Number、Boolean)在被用做对象时就像对象
- 《HTML5+JavaScript动画基础》——1.2 帧与运动
- 简单模拟javaScript面向对象
- javascript原型继承
- JavaScript有这几种测试
- JavaScript初学者必看“new”
- 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP
- 控制流程完整性:给大家介绍一种“另类”的Javascript反分析技术