JAXB有多灵活?

JAXB有多灵活?,jaxb,Jaxb,我正在考虑使用JAXB进行XML解析,但到目前为止,我遇到了一些问题,使我相信它可能不够灵活,无法满足我的需要 我将解析由第三方提供的XML,以符合我将发布的XSD。因此,我希望能够足够灵活地处理没有名称空间的文件,或者指定名称空间的旧版本,并且实际上可能包含无效元素 JAXB是否具有这种灵活性?目前,如果没有提供名称空间,它将无法解析 JAXB有多灵活 非常 所以我希望能够足够灵活地处理那些没有 名称空间或指定名称空间的旧版本,实际上 包含无效元素 名称空间过滤器 下面是一个SAXXmlFil

我正在考虑使用JAXB进行XML解析,但到目前为止,我遇到了一些问题,使我相信它可能不够灵活,无法满足我的需要

我将解析由第三方提供的XML,以符合我将发布的XSD。因此,我希望能够足够灵活地处理没有名称空间的文件,或者指定名称空间的旧版本,并且实际上可能包含无效元素

JAXB是否具有这种灵活性?目前,如果没有提供名称空间,它将无法解析

JAXB有多灵活

非常

所以我希望能够足够灵活地处理那些没有 名称空间或指定名称空间的旧版本,实际上 包含无效元素

名称空间过滤器

下面是一个SAX
XmlFilter
,可用于应用缺少的命名空间

import org.xml.sax.*;
导入org.xml.sax.helpers.XMLFilterImpl;
公共类NamespaceFilter扩展了XMLFilterImpl{
私有静态最终字符串命名空间=”http://www.example.com/customer";
@凌驾
公共void endElement(字符串uri、字符串localName、字符串qName)
抛出SAX异常{
endElement(名称空间、localName、qName);
}
@凌驾
public void startElement(字符串uri、字符串localName、字符串qName、,
属性(atts)引发SAXException{
startElement(名称空间、localName、qName、atts);
}
}
演示

下面是如何将SAX
XMLFilter
应用于JAXB的示例

import javax.xml.bind.*;
导入javax.xml.parsers.*;
导入org.xml.sax.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
//创建JAXBContext
JAXBContext jc=JAXBContext.newInstance(Customer.class);
//创建XMLFilter
XMLFilter filter=新名称空间过滤器();
//在XMLFilter上设置父XMLReader
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
XMLReader xr=sp.getXMLReader();
filter.setParent(xr);
//在XMLFilter上将UnmarshallerHandler设置为ContentHandler
Unmarshaller Unmarshaller=jc.createUnmarshaller();
解组器handler解组器handler=解组器
.getUnmarshallerHandler();
setContentHandler(解组器Handler);
//解析XML
InputSource xml=newInputSource(“src/blog/namespace/sax/input.xml”);
parse(xml);
Customer=(Customer)unmarshallerHandler.getResult();
}
}
了解更多信息