我有一个来自外部端点的巨大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;
}
我试过什么?
像这样将命名空间信息添加到@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>