Синтаксический анализ XML-файлов с помощью JDK SAX-анализатора с символом # в папке всегда завершается неудачно - PullRequest
0 голосов
/ 03 июля 2018

см. Тему. Это было выполнено для файла со следующим путем (в 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)

Заранее спасибо за любые подсказки, Лучший

1 Ответ

0 голосов
/ 03 июля 2018

# в именах файлов и папок, конечно, укажите правильный путь к файловой системе. Но он совершенно недействителен как URL.

Часто при работе с API-интерфейсами XML указывается XML-документ, который мы хотим проанализировать, через его «системный идентификатор», который является просто еще одним именем для его URI. Типичное использование - сделать его относительным URI к URL текущего каталога, поэтому его легко принять за относительный путь к файлу, так как они работают одинаково ... Но # недопустим в URL.

Вы должны были показать код, который вы используете, чтобы попытаться проанализировать, чтобы мы могли быть уверены. Странно, что вы подумали, что вам не нужно показывать код.

...