使用包含文件夹中带有字符 # 的 JDK SAX 解析器解析 xml 文件总是失败

Parsing xml files with JDK SAX parser with character # in containing folder always fails

查看主题。这是在具有以下路径的文件上执行的(在 Mac OSX 上):

/Volumes/RobExtL/xmltests/hurz#1/hurz.xml

这是一个有效的路径。

该消息表明 JDK 解析器无法处理文件名中的“#”并删除以它开头的所有内容。

使用JDOM2 可以毫无问题地解析同一个文件。我在这里不使用 JDOM2 的原因是,这是一个仅使用 SAX 确定根元素名称的实用程序,以避免解析潜在的大文件,在这种情况下,这对性能至关重要。

Stacktrace 应包含所有剩余的必要信息。

Exception in thread "main" java.io.FileNotFoundException: /Volumes/RobExtL/xmltests/hurz (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:623)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:805)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1140)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:655)
at de.lesspain.xml.XML.getRootElementName(XML.java:69)
at de.lesspain.xml.XML.hasRootElement(XML.java:80)
at XMLEntityManagerErrorTest.main(XMLEntityManagerErrorTest.java:15)

在此先感谢您的任何提示, 最佳

# in file and dir names 确保有效的文件系统路径。但它作为 URL.

是完全无效的

在使用 XML API 时,经常会通过其 "system ID" 指定我们要解析的 XML 文档,这只是其 URI 的另一个名称。典型的用法是使它成为当前目录 URL 的相对 URI,因此很容易被误认为是相对文件路径,因为它们的工作方式相同......但是 # 在 URLs 中无效。

你应该已经展示了你用来尝试和解析的代码,这样我们就可以确定了。奇怪的是你认为你不需要显示代码。