2009-10-26 68 views
1

我使用JAXB解析xml。我還想成功解析XML,當XML無效且有附加標記時。只需忽略XSD中不存在的標籤即可。可能嗎?解析無效的xml

+0

您可以指定錯誤,當您試圖做到這一點你要?你正在使用哪種JAXB實現?任何可能的代碼片段顯示你如何實例化unmarshaller和解析XML? – Jherico 2009-10-26 18:56:33

+0

我的代碼如下。 Jaxb解析成功,直到未知標記,從這一點所有已知的標記是無效的。 Unmarshaller unmarshaller = context.createUnmarshaller(); unmarshaller.setValidating(false); ValidationEventHandler validationHandler = new IwisValidationEventHandler(); unmarshaller.setEventHandler(validationHandler); public class IwisValidationEventHandler implements ValidationEventHandler { private static Logger logger = Logger.getLogger(IwisValidationEventHandler.class); public boolean handleEvent(ValidationEvent ve){ return true; } } – 2009-11-02 16:30:49

回答

0

我假設你的意思是你正在討論格式良好的XML,但是包含未在模式中定義的元素的XML?

如果是這樣,那麼JAXB就可以。 JAXB無法識別的輸入XML中的任何元素都將被忽略。

+0

缺失元素呢?我的意思是我有一堆沒有xsd的xml文檔,我從xml生成模式(應該是這樣),但有時會發生其中一個xml文檔中缺少元素。你能指點我怎麼處理它嗎?是否所有關於修改架構並設置不是強制性的元素?表示該元素的對象將是空的?我決定是否使用jaxb或爲每個xml文檔手動構建DOM,這是不好的。但是這是我上一次使用jaxb的一年。提前致謝 – lisak 2010-09-27 19:36:35

0

我的代碼如下。 Jaxb解析成功,直到未知標籤,在第一個未知標籤後,對於所有定義的標籤,警告該標籤是未知標籤(print「Unexpected element {} ...」消息)

`Unmarshaller unmarshaller = context.createUnmarshaller (); unmarshaller.setValidating(假); ValidationEventHandler validationHandler = new IwisValidationEventHandler(); unmarshaller.setEventHandler(validationHandler);

public class IwisValidationEventHandler implements ValidationEventHandler private static Logger logger = Logger.getLogger(IwisValidationEventHandler.class); public boolean handleEvent(ValidationEvent ve){ System.out.println(ve.getMessage); 返回true; } }`

0

您可以添加XSD:任何元素

<xsd:complexType name="Type">   
    <xsd:sequence> 
    <xsd:element name="root" type="Root"/> 
     <xsd:any maxOccurs="unbounded" processContents="lax"/> 
    </xsd:sequence> </xsd:complexType> 
.....