java - 使用 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 元素会有更多的命名空间。
有没有办法实现这个?我看到了一些完全忽略名称空间的答案,但感觉不是很有说服力。有没有办法正确解析这些。
这是我的用于建模 XML 响应的 java 类
@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 中心:
<dependency>
<groupId>com.github.codemonstur</groupId>
<artifactId>simplexml</artifactId>
<version>1.4.0</version>
</dependency>
推荐阅读
- c# - 可以从客户端在 url 参数中注入方法吗?
- python - 在 CNN 架构中手动指定过滤器和权重的值
- django - 如何使用自定义用户模型从前端在 django 中注册普通用户?
- c# - 我的 .NET 核心代码有什么问题,在发出数据库请求时出错
- html - 用于接受正整数和负整数的正则表达式。数字前没有小数且不超过一个连字符/破折号
- java - 通过 put 请求传递 json 时在后端接收具有 null 属性的对象
- reactjs - 无法通过本地网络访问 create-app-react 应用程序
- c++ - 在 Arduino 中的 setup() 之外调用构造函数的问题
- ios - 推送 ABPersonViewController 时应用程序在 iOS 13 中崩溃
- python - 比较张量流中的张量