使用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

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没