我在最后一行代码中遇到异常 -
Transformer transformer = TransformerFactory.newInstance().newTransformer();
DOMSource xmlSource = new DOMSource(document);
StreamResult result;
File f = new File(sFilePath);
if (f.exists() == false) {
result = new StreamResult(f);
} else {
result = new StreamResult(sFilePath);
}
transformer.transform(xmlSource, result);
Run Code Online (Sandbox Code Playgroud)
异常堆栈跟踪是 -
java.io.FileNotFoundException:C:\ ProgramData.\ config\.xml(访问被拒绝)stacktrace javax.xml.transform.TransformerException:java.io.FileNotFoundException:C:\ ProgramData.\ config\.xml(访问被拒绝)com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(未知来源)at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source)at at来自com..main.dr.a(未知来源)的com..main.dr.a(未知来源)位于com..main.hk(未知来源)的com..main.hk(未知来源)at at com..main.ay.run(Unknown Source)由以下引起:java.io.FileNotFoundException:C:\ ProgramData.\ config\.xml(访问被拒绝)java. java.io.FileOutputStream.open(Native Method) .io.FileOutputStream.java.io.FileOutputStream中的(未知来源).(未知来源)... 7更多--------- java.io.FileNotFoundException:C:\ ProgramData.\ config\.xml(访问被拒绝)在java.io.FileOutputStream.open(本机方法) )在java.io.FileOutputStream.java.io.FileOutputStream中的(未知来源).(未知来源)com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(未知来源),地址为com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(未知来自com..main.dr.a(未知来源)的com..main.dr.a(未知来源)com.com.main.dr.a(未知来源)at com..main.hk(未知)来自com..main.ay.run(未知来源)和原因isjava.io.FileNotFoundException:C:\ ProgramData.\ config\.xml(访问被拒绝)
我无法找到可能的证据.经过40个小时的自我疯狂之后,我不得不建立一个本地化项目,这个项目应该构建一个名称不佳的AllInOne项目(构建Xalan-C.lib,natch)所需的头文件.
这个库是软件的弊端,我迫切需要一个答案,因为它是另一个库中的依赖,我别无选择.
我正在尝试编译以下XERCES站点提供的示例代码:
#include <xercesc/util/PlatformUtils.hpp>
// Other include files, declarations, and non-Xerces-C++ initializations.
XERCES_CPP_NAMESPACE_USE
int main(int argc, char* argv[])
{
try {
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch) {
// Do your failure processing here
return 1;
}
// Do your actual work with Xerces-C++ here.
XMLPlatformUtils::Terminate();
// Other terminations and cleanup.
return 0;
}
Run Code Online (Sandbox Code Playgroud)
用,
g++ -g -Wall -pedantic -L/usr/lib -lxerces-c -o xercesTest xercesTest.cpp
Run Code Online (Sandbox Code Playgroud)
给我以下链接错误:
/tmp/ccYIHCfR.o: In function `main':
/home/cjmv/temp/xercesTest.cpp:8: undefined reference to `xercesc_2_8::XMLUni::fgXercescDefaultLocale'
/home/cjmv/temp/xercesTest.cpp:8: undefined reference to `xercesc_2_8::XMLPlatformUtils::Initialize(char const*, char …Run Code Online (Sandbox Code Playgroud) 我是XML的后来者 - 必须解析XML文件.我们公司已经使用了xerces所以我设法凑齐了一个示例应用程序(SAX),它显示了文件中的所有数据.但是,在解析完成后,我希望能够调用解析器或其他具有文件内部表示的实体并遍历字段/数据.
基本上我希望能够将一些键或其他字符串交给它并返回字符串或键/值对的集合.我没有看到.对我来说这似乎很明显,这是一件好事.我错过了什么吗?
DOM解析我想要的东西,还是那个也不合适?
我有一个Java应用程序,它使用在Linux和Windows上运行良好的Xerces解析大型xml架构(.xsd),但在Solaris上提供StackOverflowError,具有完全相同的输入和配置.我知道Xerces使用递归来验证xml架构,但由于它在Windows和Linux上没有出现任何问题,我非常有信心它可以在任何地方运行.
为什么会这样?有解决方法吗?
我正在使用 XercesDOMParser 在 linux (c++) 中读取 xml 文件,我想防止 xml 炸弹(Billion 笑)所以我设置了这些属性:
parser->setDoNamespaces(true)
parser->setDisableDefaultEntityResolution(true)
parser->setEntityResolver(NULL)
parser->setSkipDTDValidation(true)
Run Code Online (Sandbox Code Playgroud)
然而,它没有帮助,炸弹仍然存在。你知道如何防止它吗(我只能在 DOM 中使用 xerces)
10 倍!
我目前正在使用Xerces库来解析C++中的XML文件.我编写了算法解析器,唯一缺少的是如何检索两个标签之间的值?例如,
<name>John</name>我希望能够得到John的值,所以我可以存储在我为此目的的字符串变量中.我知道用的
DOMElement * current = root->getFirstChildElement();
const XMLCh * tag = current->getTagName();
cout << XMLString::transcode(tag) << endl;
Run Code Online (Sandbox Code Playgroud)
我将能够打印该标签,但我对标签之间的价值更感兴趣.有任何想法吗?
在构建xerces 3.1.2的过程中,我得到:
1> XML256TableTranscoder.cpp:致命错误C1083:无法打开编译器生成的文件:'':无效的参数
在发生错误之前,编译器似乎并未在.cpp文件本身上工作,因为我可以删除文件中的所有源代码,但仍然会收到错误。
将 Apache POI 从 3.17 更新到 4.0.0 后,我上线了:
OPCPackage pck = OPCPackage.open(this.getTemplate());
一个例外:
java.lang.IllegalArgumentException: Property 'http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit' is not recognized.
at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.setAttribute(DocumentBuilderFactoryImpl.java:144)
at __redirected.__DocumentBuilderFactory.setAttribute(__DocumentBuilderFactory.java:125)
at org.apache.poi.ooxml.util.DocumentHelper.trySetXercesSecurityManager(DocumentHelper.java:143)
at org.apache.poi.ooxml.util.DocumentHelper.<clinit>(DocumentHelper.java:108)
at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.parseContentTypesFile(ContentTypeManager.java:392)
at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.<init>(ContentTypeManager.java:104)
at org.apache.poi.openxml4j.opc.internal.ZipContentTypeManager.<init>(ZipContentTypeManager.java:54)
at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:258)
at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:725)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:275)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:181)
Run Code Online (Sandbox Code Playgroud)
他们在如何使用 logback 禁用 accessExternalDTD 和 entityExpansionLimit 警告中说,我应该排除 xerces,但我已经有了:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
<exclusions>
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
<exclusion>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我的设置:
回到 3.17 解决了这个问题。
我得到了一些我想用Xerces解析的合理的xml数据(由CodeSynthesis生成).
在光盘上它是加密的,所以我加载它,解密它...我被卡住,因为Xerces只接受文件作为输入.
我曾考虑过重载一个'读者'(即.std :: istream或xercesc :: InputSource)并伪造光盘读数,但它看起来像古怪而不优雅.
有没有更简单和更简洁的方法来做到这一点?
谢谢!
我在以下事件中设置xml元素内的字符:
public void characters(char[] ch, int start, int length) {
elementText = new String(ch, start, length);
}
Run Code Online (Sandbox Code Playgroud)
其中elementText是一个String.
<client-key>#<ABC::DEF::GHI:0x102548f78></client-key>
Run Code Online (Sandbox Code Playgroud)
我将此xml数据加载到java对象中,我的objects属性具有以下值:
'\n '
Run Code Online (Sandbox Code Playgroud)
现在,如果我更改<client-key>上面元素中的文本,它在我的对象属性中就可以了.
我需要以某种方式处理某些编码问题吗?
public void endElement(String uri, String localName, String qName) {
if (qName.equals("client-key")) {
client.setClientKey(elementText);
}
}
Run Code Online (Sandbox Code Playgroud)