Получить и проанализировать XML из Интернета - PullRequest
0 голосов
/ 13 июля 2010

Я хочу использовать XPath (в Java) для разбора файлов XML.Однако эти XML-файлы доступны только в Интернете (их загрузка вручную невозможна (конечно, чтобы их обработать, их нужно «загрузить»).

Поэтому в основном мой вопрос заключается в том, как это сделать.Я беру URI-объект и преобразую его в объект File. Нужно ли мне использовать SCP или что-то среднее для загрузки файла. Любой код, учебные пособия или просто общие советы будут очень благодарны.

Я пыталсяэто:

    URI uri = new URI("http://www.somefiles.com/myfile.xml");
    InputStream is = uri.toURL().openStream();
    File xmlDocument = new File(uri);

Но это дало ошибку URI scheme is not "file".

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Вы можете сделать это более сложным, но это может быть так же просто, как открытие потока из URL.

InputStream in = remoteURI.toURL().openStream();

Теперь это не File объект, как первоначально запрашивалось, но я предполагаю, что ваша библиотека XPath может обрабатывать общий InputStream. Если нет, вам придется сохранить вышеописанный InputStream во временном файле и создать для него объект File.

1 голос
/ 13 июля 2010

Попробуйте сначала записать XML на диск:

File tempDir = new File(System.getProperty("java.io.tmpdir"));
File xmlDocument = new File(tempDir, "theXml.xml");
InputStream in = remoteURI.toURL().openStream();
OutputStream out = new FileOutputStream(xmlDocument);
int read;
while ((read = in.read()) != -1){
  out.write(read);
}
in.close();
out.close();

Однако, если вам просто нужно извлечь некоторые данные из XML с помощью XPath, вам не нужно ничего записывать на диск:

InputStream in = remoteURI.toURL().openStream();
StreamSource source = new StreamSource(in);
DOMResult result = new DOMResult();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(source, result);
Document document = (Document)result.getNode();

XPath xpath = XPathFactory.newInstance().newXPath();
xpath.evaluate("...", document);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...