JAVA/JAXB 解码时应用多个命名空间

标签 java xml jaxb

我有一个 xml,我正在尝试解码。它失败是因为它缺少必需的命名空间。

<?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 来自:

关于JAVA/JAXB 解码时应用多个命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28199239/

相关文章:

java - 需要解释 Classname name = new Classname2()

java - 有没有办法使用单个日期格式字符串来解析两种类型的日期?

javascript - 如何在 SAPUI5 XML View 中使用 if-else 条件?

java - 使用 JAXB 将 XML 数据解析为字符串对象

java - JAXB 定位器 - 缺少依赖项?

java - JAXB、REST 将 XML 对象发送到远程 URL

java - Android - 需要 ondraw() 示例的帮助

java - 有没有一种简单的方法可以替换Java中字符串中任意位置的字符(并获取新字符串)?

java - 重命名 xml 文档中的子节点

xml - 如何以编程方式可视化 XML 模式?