我有一个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);
}
}
最佳答案
您问题中的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
的来源:http://blog.bdoughan.com/2012/11/applying-namespace-during-jaxb-unmarshal.html