2009-10-26 70 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> 
.....