在我的Java应用程序中,我需要获取一些文件和目录.
这是程序结构:
./main.java
./package1/guiclass.java
./package1/resources/resourcesloader.java
./package1/resources/repository/modules/ -> this is the dir I need to get
./package1/resources/repository/SSL-Key/cert.jks -> this is the file I need to get
Run Code Online (Sandbox Code Playgroud)
guiclass 加载将加载我的资源(目录和文件)的resourcesloader类.
至于文件,我试过了
resourcesloader.class.getClass().getResource("repository/SSL-Key/cert.jks").toString()
Run Code Online (Sandbox Code Playgroud)
为了获得真正的路径,但这种方式不起作用.
我不知道如何做目录.
使用JDK 6将XML文件加载到DOM中.必须针对XSD验证XML文件.XSD文件位置因运行环境而异.确保XML可以针对XSD进行验证,无论目录结构如何,都需要目录解析器.一旦验证了XML,就可以对其进行转换.
我的理解是DocumentBuilderFactory可用于配置此类验证.这是通过使用带有XMLCatalogResolver的DocumentBuilder来查找与XML文件关联的XSD文件(以及任何包含的文件)来实现的.
有关使用目录派生的XSD验证XML文档的问题包括:
这些问题和答案中的大多数引用了硬编码的XSD文件路径,或者使用SAX执行验证,或者与DTD相关,或者需要JDOM依赖项,或者没有转换.
没有规范的解决方案描述如何使用JAXP DOM进行XSD验证的XML目录,随后通过XSLT进行转换.有一个号码的片段,但编译和运行(JDK 6下)没有完整的,独立的例子.
我发布了一个答案似乎在技术上有效,但过于冗长.
什么是规范方式(使用JDK 1.6库)来验证和转换XML文档?这是一种可能的算法:
这是场景:
我捆绑了.xml应用程序在.jar文件中运行所需的几个(有些配置)文件.jar文件具有以下结构:
settings-1.0.0.jar
? resources/
? 1.xml
? 2.xml
? 3.xml
? META-INF/
? MANIFEST.MF
Run Code Online (Sandbox Code Playgroud)
1.xml 具有以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
<!-- Include 2 -->
<xi:include
href="resource:resources/2.xml" />
<!-- Include 3 -->
<xi:include
href="resource:resources/3.xml" />
<!--
<map>
</map>
-->
</document>
Run Code Online (Sandbox Code Playgroud)
基于这篇文章.当尝试访问这些包含(成功部署我的应用程序后)后,我收到以下错误:
Caused by: org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 43; An 'include' failed, and no 'fallback' element was found.
at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:245)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:298)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
at org.zcore.dkp.backend.mapper.MappingParser.parse(MappingParser.java:60)
... 327 more
Run Code Online (Sandbox Code Playgroud)
我尝试了(&错误)所有可以考虑的选项.xi:include将.xml文件 …