繁体   English   中英

使用JAXB批注进行名称空间的JAVA XML解析

[英]JAVA XML Parsing with namespaces using JAXB annotations

我从外部端点获得了巨大的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元素都不会再有任何名称空间。

有办法实现吗? 我看到一些答案完全忽略了名称空间,但并没有说服力。 有没有办法正确解析这些。

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

@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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM