当前位置: 首页 > 知识库问答 >
问题:

验证xml和xsd中枚举的Java程序

夏侯嘉荣
2023-03-14

我需要检测枚举中的错误。

这是我用枚举验证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")); 
    } 
} 

这些是我犯的错误

线程“main”组织中出现异常。xml。萨克斯。SAXParseException:cvc elt。1: 找不到元素“person”的声明。在com。太阳组织。阿帕奇。xerces。内部的util。ErrorHandlerWrapper。在com上创建SAXParseException(ErrorHandlerWrapper.java:195)。太阳组织。阿帕奇。xerces。内部的util。ErrorHandlerWrapper。com上出现错误(ErrorHandlerWrapper.java:131)。太阳组织。阿帕奇。xerces。内部的实施。XMLErrorReporter。com上的reportError(XMLErrorReporter.java:384)。太阳组织。阿帕奇。xerces。内部的实施。XMLErrorReporter。com上的reportError(XMLErrorReporter.java:318)。太阳组织。阿帕奇。xerces。内部的实施。xs。XMLSchemaValidator。com上的handlestarelement(XMLSchemaValidator.java:1916)。太阳组织。阿帕奇。xerces。内部的实施。xs。XMLSchemaValidator。startElement(XMLSchemaValidator.java:705)

共有1个答案

韩寒
2023-03-14

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

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

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

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

<element name="person"> 
    <complexType> 
        <sequence> 
            <element name="address" maxOccurs="unbounded"> 
....
 类似资料:
  • 我在验证xml和xsd时遇到问题。我从xsd模式中得到这个错误。 src解决方案。4.2:解析组件“urn:id”时出错。检测到“urn:id”位于命名空间“urn:schemas microsoft com:xml-diffgram-v1”中,但此命名空间中的组件无法从架构文档中引用virtual://server/schema.xsd。如果名称空间不正确,可能需要更改“urn:id”的前缀。如

  • 我有一个servlet,它使用打包在.jar存档中的实用程序: 此实用工具获取xml文件流,针对xsd模式执行验证并解析它: xsd文件以: xml文件: Servlet Init方法抛出异常: 如何指定SAXParser在哪里需要xsd模式来验证xml文件? 附注。对不起,我的英语不好 UPD: 我正在尝试添加此属性: UPD2:在xml文件中使用“classpath:appcontext.xs

  • 我有一个在Android中使用API10(2.3.3版本)的项目,我有一个问题是用xsd文件验证xml。这是我的代码: 我的Eclipse模拟器抛出一个异常:E/AndroidRuntime(4770):由:java.lang.IllegalArgumentException引起:http://www.w3.org/2001/XMLSchema 在这一行中:SchemaFactory factor

  • 我没有编写C++代码,因为我的首要任务是创建有效的xml和XSD。 xml: XSD: 为了验证,我转到:https://www.freeformatter.com/xml-validator-xsd.html 错误:s4s-att-invalid-value:元素“Element”中“type”的属性值无效。记录原因:cvc-datatype-valid.1.2.1:“xs:”不是“QName”

  • 问题内容: 我想使用Java解析XML文件,并针对XSD模式在同一步骤中对其进行验证。XML文件可能包含几种模式的内容,如下所示: 给定一个名称空间,可以提供相应的xsd文件,但是在解析之前,所使用的名称空间是未知的。如果架构定义了属性的默认值,我也想以某种方式知道这一点。 如果知道架构,我可以验证文件,无需验证就可以解析文件,并且实现了LSResourceResolver。但是,我无法使其全部协

  • 问题内容: 我需要使用给定的XSD文件验证XML文件。我只需要如果验证正常就返回true,否则返回false的方法。 问题答案: 仅返回true或false(也不需要任何外部库):