JAVA / JAXB在解组时应用多个名称空间

时间:2015-01-28 18:03:08

标签: java xml jaxb

我有一个xml,我正在尝试解组。它失败,因为它缺少require名称空间。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tracks>
  <tracklet><sightings/></tracklet>
<tracks>

需要成为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:tracks xmlns:ns3="http://www.mytrack.com/TRACK" xmlns:xmime="http://www.w3.org/2005/05/xmlmime">
  <tracklet><sightings/></tracklet>
</ns3:tracks>

NamespaceFilter的这个例子只做一个命名空间。我需要一个会附加两个名称空间的文件。

public class NamespaceFilter extends XMLFilterImpl {

    private static final String NAMESPACE = "http://www.example.com/customer";

    @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);
    }
}

1 个答案:

答案 0 :(得分:0)

你问题中的NamespaceFilter没有“添加”名称空间声明,它会调整元素限定名称的名称空间部分。

对于您的XML,您只需调整NamespaceFilter,以便在qname参数为tracks时仅返回命名空间。

@Override
public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
    if("tracks".equals(qname) {
        super.startElement(NAMESPACE, localName, qName, atts);
    } else {
        super.startElement(uri, localName, qName, atts);
    }
}

以下是NamespaceFilter来自我的博文的链接: