gpt4 book ai didi

java - XML 架构验证 : Cannot find the declaration of element (root)

转载 作者:行者123 更新时间:2023-12-01 17:29:11 25 4
gpt4 key购买 nike

我研究 XML 并遇到一些问题。这需要警告。我认为它与 validator 有关,因为当我注释模式路径、通过工厂创建模式和 setSchema() 时,不会出现警告消息。这是我的 validator 代码:

public class ValidatorSAX {
public static void validate(){
String fileName = "src/main/resources/planes.xml";
//String schemaName = "src/main/resources/planes.xsd";
Schema schema = null;
String language = XMLConstants.W3C_XML_SCHEMA_NS_URI;
SchemaFactory factory = SchemaFactory.newInstance(language);
try{
//schema = factory.newSchema(new File(schemaName));
SAXParserFactory spf = SAXParserFactory.newInstance();
//spf.setSchema(schema);
SAXParser parser = spf.newSAXParser();
parser.parse(fileName, new PlanesErrorHandler());
System.out.println(fileName + " is valid");
} catch (SAXException e) {
System.err.println(fileName + " SAX Error " + e.getMessage());
} catch (ParserConfigurationException e) {
System.err.println(fileName + " Configuration exception " + e.getMessage());
} catch (IOException e) {
System.err.println(" I/O Error" + e.getMessage());
}

}
}

Handler的代码:

public class PlanesErrorHandler extends DefaultHandler {
private static Logger logger = LogManager.getLogger(PlanesErrorHandler.class);
public PlanesErrorHandler(){ }
public void warning(SAXParseException e) {
logger.warn(getLineAddress(e) + "-" + e.getMessage());
}
public void error(SAXParseException e) {
logger.error(getLineAddress(e) + " - " + e.getMessage());
}
public void fatalError(SAXParseException e) {
logger.fatal(getLineAddress(e) + " - " + e.getMessage());
}
private String getLineAddress(SAXParseException e) {
return e.getLineNumber() + " : " + e.getColumnNumber();
}

有架构代码:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:Planes.Namespace"
xmlns="urn:Planes.Namespace"
elementFormDefault="qualified">
<xsd:element name="planes">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Plane"
type="Plane"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="Plane">
<xsd:sequence>
<xsd:element name="model" type="ModelName"/>
<xsd:element name="origin" type="xsd:string"/>
<xsd:element name="chars" type="Chars"/>
<xsd:element name="parameters" type="Parameters"/>
<xsd:element name="price" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="ModelName">
<xsd:restriction base="xsd:string"><xsd:pattern value="[A-Z]{2,4}-[1-9]{2,4}"/></xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="Chars">
<xsd:sequence>
<xsd:element name="numberOfSeedsForCrew" type="xsd:positiveInteger"/>
<xsd:element name="characteristics" type="Characteristics"/>
<xsd:element name="radarAvailability" type="xsd:boolean"/>
</xsd:sequence>
<xsd:attribute name="type">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="transport"></xsd:enumeration>
<xsd:enumeration value="passengers"></xsd:enumeration>
<xsd:enumeration value="freight"></xsd:enumeration>
<xsd:enumeration value="fire"></xsd:enumeration>
<xsd:enumeration value="agricultural"></xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
<xsd:complexType name="Characteristics">
<xsd:sequence>
<xsd:element name="carryingCapacity" type="xsd:positiveInteger"/>
<xsd:element name="numberOfPassengers" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Parameters">
<xsd:sequence>
<xsd:element name="length" type="xsd:double"/>
<xsd:element name="width" type="xsd:double"/>
<xsd:element name="height" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

和 xml 代码:

<?xml version="1.0"?>
<planes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:Planes.Namespace"
xsi:schemaLocation="urn:Planes.Namespace planes.xsd">
<Plane>
<model>AN-225</model>
<origin>Ukraine</origin>
<chars type="transport">
<numberOfSeedsForCrew>6</numberOfSeedsForCrew>
<characteristics>
<carryingCapacity>250000</carryingCapacity>
<numberOfPassengers>70</numberOfPassengers>
</characteristics>
<radarAvailability>true</radarAvailability>
</chars>
<parameters>
<length>84.0</length>
<width>94.8</width>
<height>18.1</height>
</parameters>
<price>300000</price>
</Plane>
<Plane>
<model>AN-148</model>
<origin>Ukraine</origin>
<chars type="passengers">
<numberOfSeedsForCrew>5</numberOfSeedsForCrew>
<characteristics>
<carryingCapacity>42000</carryingCapacity>
<numberOfPassengers>85</numberOfPassengers>
</characteristics>
<radarAvailability>true</radarAvailability>
</chars>
<parameters>
<length>29.13</length>
<width>33.91</width>
<height>8.19</height>
</parameters>
<price>7400</price>
</Plane>
<Plane>
<model>AT-56</model>
<origin>USA</origin>
<chars type="agricultural">
<numberOfSeedsForCrew>1</numberOfSeedsForCrew>
<characteristics>
<carryingCapacity>7257</carryingCapacity>
<numberOfPassengers>0</numberOfPassengers>
</characteristics>
<radarAvailability>false</radarAvailability>
</chars>
<parameters>
<length>11.7</length>
<width>18.68</width>
<height>3.8</height>
</parameters>
<price>893.9</price>
</Plane>
</planes>

当我注释这些行时,我不确定程序是否正确执行。我之前认为问题与 xsd 有关,但现在我不确定它是什么:(有问题的输出:

[main] ERROR org.example.handler.PlanesErrorHandler - 2 : 9 - cvc-elt.1.a: Cannot find the declaration of element 'planes'.

如果有人向我解释这个问题,我会很高兴。

最佳答案

尝试添加

static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
parser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);

关于java - XML 架构验证 : Cannot find the declaration of element (root),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61156330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com