2014-01-13 60 views
2

我有一个xml文档,它遵循一些xml模式。不幸的是,问题是xml模式名称空间已经改变,所以现在我在声明命名空间栏的命名空间foo和文档中有一个模式。我使用xjc为模式创建jaxb类,以便将它们绑定到名称空间foo。JAXB是否可以为命名空间设置别名

是否有可能使用相同的xjc生成的类来创建一个jaxb unmarshaller,它可以在名称空间foo和bar中解组这两个文档?

我期待你可以在JaxbContext中定义一些属性,它会说名称空间的foo和bar是相同的......有谁知道这样的事情是否由Jaxb提供者支持?

回答

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来处理输入。

更多信息

+1

尼斯和干净的解决方案。谢谢! – miljanm