我有一个xml文档,它遵循一些xml架构。不幸的是,问题是xml架构命名空间已经改变,所以现在我在命名空间foo和文档中有一个模式来声明命名空间栏。我使用xjc为模式创建jaxb类,因此它们绑定到名称空间foo。
是否可以创建一个jaxb unmarshaller,它可以使用相同的xjc生成的类解组名称空间foo和bar中的两个文档?
我希望您可以在JaxbContext中定义一些属性,它们可以说命名空间foo和bar是相同的......有没有人知道Jaxb提供程序是否支持这样的东西?
答案 0 :(得分:2)
您可以使用SAX XMLFilter
来调整命名空间。
import org.xml.sax.*;
import org.xml.sax.helpers.XMLFilterImpl;
public class NamespaceFilter extends XMLFilterImpl {
private static final String NAMESPACE = "http://www.example.com/ORIGINAL/NAMESPACE";
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(NAMESPACE, localName, qName);
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
super.startElement(NAMESPACE, localName, qName, atts);
}
}
然后使用带有SAX解析器的JAXB UnmarshallerHandler
来处理输入。
了解更多信息