当前位置: 首页 > 面试题库 >

Java XML Schema验证:前缀未绑定

宋晋
2023-03-14
问题内容

我已经按照本教程验证XML文件。但是我在验证XML文件时收到异常。我做错了什么?我的代码:
XML模式:

<?xml version="1.0" encoding="utf-8" ?>

<!-- definition of simple elements -->
<xs:element name="first_name" type="xs:string" />
<xs:element name="last_name" type="xs:string" />
<xs:element name="phone" type="xs:string" />

<!-- definition of attributes -->
<xs:attribute name="type" type="xs:string" use="required"/>
<xs:attribute name="date" type="xs:date" use="required"/>

<!-- definition of complex elements -->

<xs:element name="reporter">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="first_name" />
            <xs:element ref="last_name" />
            <xs:element ref="phone" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:element name="report">
    <xs:complexType>
        <xs:attribute ref="type"/>
        <xs:attribute ref="date" />
        <xs:sequence>
            <xs:element ref="reporter" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

验证XML文件

<?xml version="1.0" encoding="utf-8" ?>
<report type="5" date="2012-12-14">
    <reporter>
        <first_name>FirstName</firstname>
        <last_name>Lastname</lastname>
        <phone>+xxxxxxxxxxxx</phone>
    </reporter>
</report>

用于验证的Java源代码:

import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
import org.xml.sax.SAXException;
import java.io.*;

public class ProtocolValidator
{
    public static void main(String [] args) throws Exception
    {
        Source schemaFile = new StreamSource(new File("schema.xsd"));
        Source xmlFile = new StreamSource(new File("test_xml.xml"));

        SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = schemaFactory.newSchema(schemaFile);
        Validator validator = schema.newValidator();

        try{
            validator.validate(xmlFile);
            System.out.println(xmlFile.getSystemId() + " is valid");
        }
        catch (SAXException e) 
        {
            System.out.println(xmlFile.getSystemId() + " is NOT valid");
            System.out.println("Reason: " + e.getLocalizedMessage());
        }
    }
}

我收到的例外情况:

Exception in thread "main" org.xml.sax.SAXParseException; systemId: file:/root/test/schema.xsd; lineNumber: 4; columnNumber: 50; The prefix "xs" for element "xs:element" is not bound.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)...

问题答案:

XML模式文件本身必须是有效的XML文档。您缺少外部模式元素和xs前缀的名称空间声明。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <!-- schema elements here -->
</xs:schema>


 类似资料:
  • 此代码显示未绑定异常,我尝试了所有组合...不能重新解决!! 整个代码是:

  • 问题内容: 我在“ tx:annotation-driven”行上收到上述错误,但是我在Bean文件的顶部声明了名称空间,为什么以下XML导致此错误? 问题答案: 就像其他xmlns:定义一样,您需要一个xmlns:tx

  • 问题内容: 我重新启动了Eclipse,并且错误在同一行上更改为“错误:解析XML:未绑定前缀” 我正在尝试在我的android phonegap应用程序中使用此插件。这是一个本地通知插件。我在这行的config.xml文件中收到错误: 有一个关于这个问题的一个类似的问题在这里,但答案是不相关的我的问题。 这是我的config.xml文件: 我正在使用带有adt插件的eclipse。我生成了一个a

  • 问题内容: 我的项目无法识别xml中的com.facebook.widget.ProfilePictureView(或其他窗口小部件)。我导入了facebook sdk,甚至使用它来登录并与开放图进行交互。一切正常,我只是想添加个人资料图片,因此最终在sdk中使用了此小部件。 我尝试将facebooksdk.jar复制到我的libs文件夹并将其添加到构建路径,但是仍然存在未绑定的前缀错误。 我的项

  • 我在我的“tx:注解驱动”行上得到了上面的错误,但是我已经在bean文件的顶部声明了命名空间,为什么以下XML会导致这个错误?

  • 我读过很多关于这方面的帖子,但我无法解决我的问题。当我试图验证zend表单验证码时,即使文本正确,也总是失败。下面是我的代码: 谢谢你的时间和帮助!! 我看到了一些不可靠的东西:当我在联系人操作中转储$_post时,我的结果是: 我刚刚输入的验证码甚至出现了,取而代之的是验证码凯!!?? 我觉得我需要删除这个captchaField,但不知道如何到目前为止! 我可以用JS做到这一点,但必须有一个干