使用 JAXB 注释使用命名空间进行 JAVA XML 解析



我有一个来自外部端点的巨大XML响应。我想解析对 java 类的 XML 响应。如果没有 XML 具有命名空间,我能够解析到各自的 POJOS,并且在此之前一切进展顺利。

但是,响应可能仅在根元素中包含命名空间。 例如,像这样

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="somevalue here" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RestOfTheDocument> something here </RestOfTheDocument>
</Document>

我可以保证没有一个内部 xml 元素将具有更多的命名空间。

有没有办法实现这一点?我看到一些完全忽略命名空间的答案,但感觉不是很有说服力。有没有办法正确解析这些。

这是我的 java 类,用于对 XML 响应进行建模

@XmlRootElement(name = "Document")
static class Response {
@XmlElement(name = "RestOfTheDocument", required = true, nillable = false)
RestOfTheDocument restOfTheDocument;
}

我试过什么?

  1. 这样将命名空间信息添加到@XmlRootElement

    @XmlRootElement(name = "Document", namespace = "somevalue here")
    

这样做会使所有内部 xml 元素都为 NULL。

注意:我已经将巨大的内部级别抽象为 RestOfTheDocument,但有很多,但它们都不会在响应中有任何命名空间!

谢谢!

SimpleXml 将忽略命名空间,只解析 XML:

public class Document {
public String RestOfTheDocument;
}
final String data = ...;
final SimpleXml simple = new SimpleXml();
final Document document = simple.fromXml(data, Document.class);
System.out.println(document.RestOfTheDocument);

这将输出:

something here

从 maven central:

<dependency>
<groupId>com.github.codemonstur</groupId>
<artifactId>simplexml</artifactId>
<version>1.4.0</version>
</dependency>

最新更新