簡體   English   中英

使用DOM和SAX解析器針對xsd進行xml驗證

[英]xml validation against xsd with DOM and SAX parser

我正在使用xsd驗證xml文檔。 通過使用sax解析器,它可以成功驗證。 但是,當我們使用DOM解析器時,它會給出以下錯誤:“驗證器類:com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl

org.xml.sax.SAXParseException; cvc-elt.1:找不到元素'diagram'的聲明。”

 **XSD File** <?xml version="1.0" encoding="UTF-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="xmlns:xsi" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="diagram"> <xs:complexType> <xs:sequence> ---- ---- ---- **XML File** <?xml version="1.0" encoding="UTF-8"?> <diagram xmlns="xmlns:xsi"> <class name="Customer"> 

編輯:

簡化的XSD(schema1.xsd)

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="xmlns:xsi" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="diagram">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="class" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

簡化的XML(xml1.xml):

<diagram xmlns="xmlns:xsi">
    <class>classe</class>
</diagram>

最少的代碼可重現:

// load document
// Get Document Builder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

// Build Document
Document doc = builder.parse(new File("./resources/xml1.xml"));

SchemaFactory aSF = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = aSF.newSchema(new File("schema1.xsd"));
Validator validator = schema.newValidator();

Source dsource = new DOMSource(doc);
validator.validate(dsource);

您的targetNamespace定義不尋常(它本身看起來像一個前綴聲明)。 此外,它使用的是“保留” xsi前綴,通常由“ Xml Schema Instance”使用。

也許DOM驗證正以某種“假” xmlns:xsi前綴被欺騙,您是否可以嘗試使用除xmlns:xsi之外的另一個名稱空間值來查看結果是否不同?

編輯

經過一番搜索,這是因為創建DOM不支持名稱空間 要修復它,您只需將documentBuilder設置為可識別名稱空間:

factory.setNamespaceAware(true);

這正在解決我的問題。

暫無
暫無

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

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