当前位置: 首页 > 知识库问答 >
问题:

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

戚良弼
2023-03-14

我有一个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);
    }
}

共有1个答案

郑俊美
2023-03-14

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

对于您的XML,您只需要调整名称空间过滤器,使其仅在qname参数为跟踪时返回名称空间。

@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
 类似资料:
  • 当我试图使用包含名称空间的JAXB将xml转换为Java对象时,会发生错误。 示例示例:' Zeta Walnes ` 我需要忽略名称空间

  • 我有一个为安全令牌构建的XML。这些包含基于WS-Trust的名称空间,但是当我解组这个XML以创建< code > RequestSecurityTokenResponseCollection 对象时,它用< code>ns1 、< code>ns2 、< code>ns3等名称空间替换了这些名称空间。 是否有一种方法可以在不更改输入XML中的名称空间和名称空间前缀的情况下解组XML? 这是我一

  • 我刚开始在xml中使用名称空间,所以我有点困惑,希望得到一些澄清。我有一个java服务,我正在接收具有许多不同名称空间的xml文档,当我开始工作时,我觉得我肯定做错了什么,所以我想检查一下。在我的包裹信息中。java我有我的模式注释,例如: 我有一辆火车.java在班级级别上注释如下: 并且类中的每个字段都注释为: 列车包含乘客列表,因此有一个属性 并且该集合被注释为: 然后在乘客体内。java类

  • 我的代码如下: 我怎样才能让它工作?如果我的xml标记有一些相关元素,如上面的“xmlns”,则JAXB解组器会抛出异常。 这是我第一次这么做,所以我对JAXB、解编等都一无所知。我在苦苦挣扎任何帮助都是好的。 编辑StackTrace:

  • 我在名称空间方面有问题。我需要从一个公共api (Prestashop)解组。该api使用xml作为xlink类型,如下所示: 每种产品的 API 为: 我为每个XML生成了两个包含pojo类的包。我想从产品列表中获取给定id的任何产品的属性。 我有一个产品,其中包含@XMLSchema命名空间,但这个命名空间仅针对一个路径是静态的。我知道这不是这样做的方法。 下面,我的客户类。 这里有代码:ht

  • 我有下面的,我试图使用JAXB将其转换为Java对象。我在这里得到空值,请指导我这里缺少什么或做错了什么。 我不熟悉 JAXB 和命名空间