【发布时间】:2017-03-29 16:25:22
【问题描述】:
我正在开发一个 Spring Boot 项目,并且我有一个要求,我想将原始 xml 读入应用程序并使用解析器解析该 xml 以转换为域对象。我拥有的 xml 是一个没有任何命名空间或模式的普通 xml。下面是我的xml格式
<?xml version ="1.0" ?>
<applications>
<state>xyz</state>
<app name="PROJECTx">
<catids>
<catid>1</catid>
<catid>2</catid>
</catids>
<cys>
<mxvalue>1000</mxvalue>
<mnvalue>0.01</mnvalue>
<activity>ACTIVE</activity>
</cys>
</app>
</applications>
我计划在我的启动应用程序中使用普通的 DOM Parser API 来读取此 xml 并将值转换为域对象。
@SpringBootApplication
@ComponentScan("com.test")
@ImportResource("applications.xml")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我尝试使用 @ImportResource 注释来读取这个 xml,但在 spring boot 启动时出现以下错误。
Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'applications'.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) ~[na:1.8.0_71]
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134) ~[na:1.8.0_71]
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396) ~[na:1.8.0_71]
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) ~[na:1.8.0_71]
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284) ~[na:1.8.0_71]
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1900) ~[na:1.8.0_71]
看起来 @ImportResource("applications.xml") 需要一些命名空间和架构。
有人可以帮我解决这个问题,让我知道这在 SpringBoot 应用程序中是否可行,我该怎么做。提前致谢。
【问题讨论】:
-
您的 XML 缺少命名空间声明。任何网络搜索都应该找到很多示例。因缺乏研究而投反对票。
-
@Andreas 这是我需要使用的 xml。正如我已经说过的,它是一个没有任何命名空间的原始 xml。任何想法
-
@Andreas 你的意思是我需要自己向这个 xml 添加名称空间。好吧,我有这份合同需要处理。
-
@ImportResource用于导入 Spring<beans/>XML 文件。请参阅 javadoc。 那个是配置文件,不是bean定义文件。我想你正在寻找@PropertySource。 -
@ImportResource用于导入 Spring 上下文 xml 文件。它不适用于导入/读取任意 xml 文件。如果您想使用解析器,请使用解析器并自己阅读。
标签: java xml spring spring-boot