有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java组织。xml。萨克斯。SAXS异常;cvcelt。1:找不到元素“data”的声明

我有以下xsd文件:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="data">
        <xs:complexType>
            <xs:sequence>
                <xs:element type="xs:string" name="city"/>
                <xs:element name="temperature">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="value">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:byte">
                                            <xs:attribute type="xs:string" name="unit"/>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element type="xs:dateTime" name="measured_at_ts"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <city>Copenhagen</city>
    <temperature>
        <value unit="celsius">27</value>
    </temperature>
    <measured_at_ts>2020-08-01T18:00:00</measured_at_ts>
</data

当我尝试执行以下代码时:

    public static void main(String[] args) {
        System.out.println(XmlHandler.isXmlValid("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                "<data>" +
                "    <city>Copenhagen</city>" +
                "    <temperature>" +
                "        <value unit=\"celsius\">27</value>" +
                "    </temperature>" +
                "    <measured_at_ts>2020-08-01T18:00:00</measured_at_ts>" +
                "</data>"));

    private static boolean isXmlValid(String xml) {
        boolean xmlValid = true;
        try {
            validate(xml);
        } catch (SAXException | IOException | ParserConfigurationException e) {
            xmlValid = false;
            e.printStackTrace();
        }
        return xmlValid;
    }

    private static void validate(String xml) throws SAXException, ParserConfigurationException, IOException {
        final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        final Document document = builder.parse(new InputSource(new StringReader(xml)));
        final SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        final String s = XmlHandler.class.getResource("/").getPath() + "weather.xsd";
        factory.newSchema(new File(s)).newValidator().validate(new DOMSource(document));
    }

我明白了

我试着把这个例子概括为:

xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="data">
    </xs:element>
</xs:schema>

xml

<?xml version=\"1.0\" encoding=\"UTF-8\"?><data></data>

但仍然得到同样的结果

任何关于上述错误原因的提示都将不胜感激


共 (0) 个答案