【问题标题】:java program to validate the enumerations in xml and xsd用于验证 xml 和 xsd 中的枚举的 java 程序
【发布时间】:2014-07-26 06:05:51
【问题描述】:

我需要检测枚举中的错误

这是我用枚举验证 XML 和 XSD 的代码,但我得到了很多错误。谁能给我一些关于错误信息的反馈(由java程序打印)?

这是我要验证的文档

<?xml version="1.0" encoding="UTF-8"?> 
<person name="avinash" age="27" gender="male"> 
    <address type="email">xgjjkk@gmail.com</address> 
    <address type="phone">khkhlll</address> 
    <address type="company">jgjhgjhgk</address>  
</person> 

这是我的架构

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/persondetails" xmlns:tns="http://www.example.org/persondetails" elementFormDefault="qualified"> 
    <element name="person"> 
        <complexType> 
            <sequence> 
                <element name="address"> 
                    <complexType> 
                        <attribute name="type"> 
                            <simpleType> 
                                <restriction base="string"> 
                                    <enumeration value="email"></enumeration> 
                                    <enumeration value="phone"></enumeration> 
                                    <enumeration value="company"></enumeration> 
                                </restriction> 
                            </simpleType> 
                        </attribute> 
                    </complexType> 
                </element> 
            </sequence> 
            <attribute name="name" type="string"></attribute>  
            <attribute name="age" type="int"></attribute>  
            <attribute name="gender" type="string"></attribute> 
        </complexType> 
    </element> 
</schema> 

Java 程序

package com.pack.group;

import javax.xml.XMLConstants; 
import javax.xml.transform.stream.StreamSource; 
import javax.xml.validation.Schema; 
import javax.xml.validation.SchemaFactory; 
import javax.xml.validation.Validator; 

public class Error { 

    public static void main(String[] args) throws Exception { 
        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
        Schema schema = factory.newSchema(new StreamSource("D:/project/enum1.xsd")); 
        Validator validator = schema.newValidator(); 
        validator.validate(new StreamSource("D:/project/enum.xml")); 
    } 
} 

这些是我得到的错误

线程“主”org.xml.sax.SAXParseException 中的异常:cvc-elt.1: 找不到元素“人”的声明。在 com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195) 在 com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131) 在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384) 在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318) 在 com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1916) 在 com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:705)

【问题讨论】:

  • 您需要在问题中添加您遇到的 Java 错误,以便人们可以提供帮助。

标签: java xml xsd


【解决方案1】:

您的架构将 address 声明为 empty 元素(它只能包含属性),因此您的实例将无法验证。

如果您希望在 address 元素中允许简单的文本内容,您需要以不同的方式声明它,将属性声明作为元素简单内容的扩展:

<element name="address"> 
    <complexType> 
        <simpleContent>
            <extension base="string">
                <attribute name="type"> 
                    <simpleType> 
                        <restriction base="string"> 
                            <enumeration value="email"></enumeration> 
                            <enumeration value="phone"></enumeration> 
                            <enumeration value="company"></enumeration> 
                        </restriction> 
                    </simpleType> 
                </attribute> 
            </extension>
        </simpleContent>
    </complexType> 
</element> 

您的实例仍然无法验证,因为您只允许 一个address 元素。您可以使用maxOccurs="unbounded"(或一些固定值,例如maxOccurs="3")来更改它:

<element name="person"> 
    <complexType> 
        <sequence> 
            <element name="address" maxOccurs="unbounded"> 
....

【讨论】:

  • 在@helderdarocha 所说的更改后验证它之后,我收到一个错误cvc-elt.1:找不到元素'person'的声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2020-07-28
  • 1970-01-01
相关资源
最近更新 更多