我需要检测枚举中的错误。
这是我用枚举验证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)
您的架构将地址
声明为空元素(它只能包含属性),因此您的实例将无法验证。
如果希望在元素中允许简单的文本内容,则需要以不同的方式进行声明,将属性声明作为元素简单内容的扩展:
<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(也不需要任何外部库):