簡體   English   中英

在XSD模式下使用XML驗證的問題

[英]Problems using xml validation with xsd schema

這是我第一次使用xsd來驗證Java中的xml文檔,而我似乎真的無法使它正常工作。

好吧,首先這里是我的xml文檔結構Employees.xml:

<?xml version="1.0"?>
<x:Employees xmlns:x="urn:Employees">
  <Employee id="1">
    <name>Some Guy</name>
    <gender>Male</gender>
    <role>Java Developer</role>
  </Employee>
  <Employee id="2">
    <name>Some lady</name>
    <gender>Female</gender>
    <role>CEO</role>
  </Employee>
</x:Employees>

這是我的xsd文件結構EmployeesXmlSchema.xsd:

<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:x="urn:Employees" targetNamespace="urn:Employees">

<xsd:element name="Employees" type="x:Employees"/>
<xsd:complexType name="Employees">
<xsd:sequence>
    <xsd:element name="Employee" type="x:Employee" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Employee">
    <xsd:sequence>
        <xsd:element name="name" type="xsd:string"/>
        <xsd:element name="gender" type="xsd:string"/>
        <xsd:element name="role" type="xsd:string"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>

這是嘗試驗證xml文檔的Java代碼:

try {
            String language = XMLConstants.W3C_XML_SCHEMA_NS_URI;
            SchemaFactory factory = SchemaFactory.newInstance(language);
            schema = factory.newSchema(schemaFile);

            // Parse the XML document to DOM Document, and then validate it
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
            builderFactory.setNamespaceAware(true);
            DocumentBuilder builder = builderFactory.newDocumentBuilder();
            Document doc = builder.parse(xmlFile);
            DOMSource source = new DOMSource(doc);

            Validator validator = schema.newValidator();
            validator.validate(source);

            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;

        }

我收到的錯誤是SAXParseException並說:

發現無效的內容(從元素“ Employee”開始)。 預期為“ {{urn:Employees“:Employee}”之一。

我真的希望有人可以向我解釋為什么會出錯。

任何幫助將不勝感激

首先,您應該更正您的XML:

<Employees xmlns="urn:Employees" id="1">
    <name>Some Guy</name>
    <gender>Male</gender>
    <role>Java Developer</role>
</Employees>

或更正您的XSD:

<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:x="urn:Employees" targetNamespace="urn:Employees">

<xsd:element name="Employees" type="x:Employees"/>
<xsd:complexType name="Employees">
<xsd:sequence>
    <xsd:element name="Employee" type="x:Employee" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Employee">
    <xsd:sequence>
        <xsd:element name="name" type="xsd:string"/>
        <xsd:element name="gender" type="xsd:string"/>
        <xsd:element name="role" type="xsd:string"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>

其次,您應該啟用對XML名稱空間的支持:

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM