簡體   English   中英

給定xsd / xml的SAXParseException代碼cvc-elt.1

[英]SAXParseException code cvc-elt.1 for given xsd/ xml

我有給定的xsd文件和該文件的示例。 xsd與http://www.forum-datenaustausch.ch/hospitalinvoicerequest_400.xsd非常相似,但根目錄下有一個附加元素。

問題是如果我針對架構驗證給定的xml(使用moxy作為JAXBCOntextFactory),則會收到此錯誤:

enterCaused by: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 221; cvc-elt.1: Cannot find the declaration of element 'invoice:request'.

invoice:request是xml開始的根元素:

<invoice:request role="production" xmlns:invoice="http://www.medidata.ch/QO/XSD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.medidata.ch/QO/XSD QO_MDInvoiceRequest_400.xsd">

如果我在線或在Eclipse(右鍵單擊驗證)中針對架構驗證xml,則一切正常。 如果我將名稱空間從

xmlns:invoice="http://www.medidata.ch/QO/XSD"

xmlns:invoice="http://www.xmlData.ch/xmlInvoice/XSD"

錯誤消失了-但是由於其他因素,我得到了另一個錯誤。 使用這個名稱空間聲明,我什至無法在沒有驗證的情況下讀取內容:root的getter返回null。 使用替代聲明(“ http://www.xmlData.ch/xmlInvoice/XSD ”)並且無需驗證,一切正常!

那么名稱空間聲明怎么了?

該錯誤表明您的文檔無效,因為沒有定義具有本地名稱request和名稱空間前綴invoice的元素。 您的實例文檔具有用於該前綴的名稱空間綁定和同一名稱空間URI的架構位置提示,因此該部分似乎是正確的。

檢查您的架構是否存在以下問題:

  1. 模式的目標名稱空間是否與文檔的根元素所使用的名稱空間相同(此處為http://www.medidata.ch/QO/XSD
  2. 是否存在與本地元素具有相同本地名稱的全局元素聲明(此處為request
  3. 如果您的根元素是在模式中使用名稱空間前綴聲明的,則該前綴是否綁定到文檔中使用的相同名稱空間URI

如果其中任何一個不正確,則您的文檔無效。 (稍后,在您的架構或實例XML文檔中可能還會出現其他問題,導致其無效。)

通常(如果您的XML文檔確實有效),則此問題是由以下兩個原因之一引起的:

  1. 找不到您的架構文件
  2. 元素名稱被誤解,因為解析器未設置為可識別名稱空間

標記xsi:schemaLocation="http://www.medidata.ch/QO/XSD QO_MDInvoiceRequest_400.xsd"定義了從相對地址中找到名稱空間http://www.medidata.ch/QO/XSD元素的架構(文件)位置QO_MDInvoiceRequest_400.xsd 因此,如果您沒有明確告訴解析器應該使用哪個架構文檔,它將從輸入文檔所在的文件夾中查找具有該名稱的文件。

出於第二個原因,由於我不熟悉moxy,但是我//我假設moxy始終將XML文件作為名稱空間感知來處理,因此我無法提供任何幫助。

暫無
暫無

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

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