Я хотел бы выполнить вопросы XPath на XML-документе онлайн. Я создал InputStreams, которые восстанавливают содержание и прилагают <? xml...?>
заголовок, который объявляет кодирование существующим в набор символов
область запросов HTTP. Хотя это работает, это крайне медленно.
//bis is the BufferedInputStream with the content part of the HTTP reply
docBuilder = docBuilderFactory.newDocumentBuilder();//throws exception.
Document doc = docBuilder.parse
(new PrependInputStream(bis,
"<?xml version='1.0' encoding='"+charset+"' ?>\r\n"));
(пожалуйста, позвольте мне не помещать свой целый источник на этот раз: я готовлю назначение на студентов).
Некоторый strace анализ показал, что программа останавливается, связываясь w3.org:
send(8, "GET /TR/xhtml1/DTD/xhtml1-transitional.dtd HTTP/1.1\r\nUser-Agent: Java/1.6.0_17\r\nHost: www.w3.org\r\nAccept:
text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\nConnection: keep-alive\r\n\r\n", 186, 0)
recv(8, ...
Поскольку я не волнуюсь слишком много о содержимом HTML, чтобы быть действительным (правильно построенный, должен быть достаточно), я попробовал docBuilderFactory.setValidating (ложный)
, но это, кажется, не предотвращает поиск онлайн ДАТЫ.
Trying to set manually a schema with docBuilderFactory.setSchema()
using the same dtd file retrieved manually results in a "org.xml.sax.SAXParseException: The markup in the document preceding the root element must be well-formed. " (that was not a good idea)
Где я сверхусложняю вещи?
(бэкенд XML, кажется, com.sun.org.apache.xerces.internal.impl.xs. XMLSchemaLoader.loadSchema, насколько я могу сказать от трассировок стека - если это имеет какое-либо применение).