使用XSD验证xml

2023-11-26 06:40
文章标签 xml 使用 验证 xsd

本文主要是介绍使用XSD验证xml,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用XSD验证XML

本文简单介绍如何使用XSD验证自己的xml。项目中我们经常使用xml作为配置或者数据交互的文件格式,在解析XML前最好验证一下或者在生成xml文件后验证一下生成的文件格式是正确,这样可以避免解析时出现一些低级的xml文件不符合预定义格式的错误。

CSDN无法正确显示这些xsd, xml以及java代码,如果需要请参考http://yqbjtu.blog.163.com/blog/static/529426201672674444341/
第一步显示定义XSD,这个参考网上很多教程,本文给出一个简单实例。

order_v1.xsd

<?xml version="1.0" encoding="UTF-8"?>
<!--
- Licensed Text
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"elementFormDefault="qualified"targetNamespace="http://demo.com/OrderXMLSchema_v1"xmlns:tns="http://demo.com/OrderXMLSchema_v1"><xsd:element name="shipOrder" type="tns:shipOrder"></xsd:element><xsd:complexType name="shipOrder"><xsd:sequence maxOccurs="1" minOccurs="1"><xsd:element name="orderperson" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element><xsd:element name="order-description" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element><xsd:element name="items" type="tns:items" maxOccurs="1" minOccurs="1"></xsd:element><xsd:element name="item-2" type="tns:item-2" maxOccurs="unbounded" minOccurs="1"></xsd:element></xsd:sequence></xsd:complexType><xsd:complexType name="items"><xsd:sequence maxOccurs="unbounded" minOccurs="1"><xsd:element name="item" minOccurs="1" maxOccurs="1"><xsd:complexType><xsd:simpleContent><xsd:extension base="xsd:string"><xsd:attribute name="index" type="xsd:unsignedLong" /></xsd:extension></xsd:simpleContent></xsd:complexType></xsd:element></xsd:sequence></xsd:complexType><xsd:complexType name="item-2"><xsd:sequence maxOccurs="1" minOccurs="1"><xsd:element name="title" type="xsd:string"/><xsd:element name="note" type="xsd:string" minOccurs="0"/><xsd:element name="quantity" type="xsd:positiveInteger"/><xsd:element name="price" type="xsd:decimal"/></xsd:sequence><xsd:attribute name="index" type="xsd:unsignedLong" /></xsd:complexType></xsd:schema>

Xml文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
- Licensed Description.
-->
<shipOrder xmlns="http://demo.com/OrderXMLSchema_v1"xmlns:server="http://demo.com/OrderXMLSchema_v1"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><orderperson>John Smith</orderperson><order-description>This document is used for demo sxN#</order-description><items><item index="1">some potatoes</item><item index="2">some tomatoes</item></items><item-2 index="1"><title>Hide your heart</title><quantity>1</quantity><price>9.90</price></item-2><item-2 index="2"><title>Hide your heart</title><note>this is for testing note, it is not required</note><quantity>1</quantity><price>9.90</price></item-2></shipOrder>

最后是我们的java代码

import java.io.File;
import java.io.UnsupportedEncodingException;import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;import org.xml.sax.SAXException;public class index="2"><title>Hide your heart</title><note>this is for testing note, it is not required</note><quantity>1</quantity><price>9.90</price></item-2>

其余部分基本类似,比较需要注意的是item类型,它有attribute也有value。

 <item index="2"> some tomatoes </item>

它的定义是

        <xsd:element name="item" minOccurs="1" maxOccurs="1"><xsd:complexType><xsd:simpleContent><xsd:extension base="xsd:string"><xsd:attribute name="index" type="xsd:unsignedLong" /></xsd:extension></xsd:simpleContent></xsd:complexType></xsd:element>

图片
这里写图片描述

这里写图片描述

这篇关于使用XSD验证xml的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/425276

相关文章

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方