Ошибка, которую вы видите, похоже на проблему развертывания веб-приложения.Если вы отправите полную трассировку стека с помощью Cause , я смогу помочь вам в дальнейшем.Вы включили в проект все необходимые файлы jar?
Однако есть несколько других проблем, которые необходимо исправить, иначе код не будет работать должным образом.
Во-первых, файл KMLне является действительным.Закрывающий тег </Kml>
не соответствует открывающему тегу <kml>
.XML учитывает регистр.
Во-вторых, используемый вами XPath не пространство имен .Предполагается, что тег без префикса находится в пространстве имен по умолчанию.Вам необходимо добавить это пространство имен по умолчанию.
Я сделал небольшую демонстрацию, которая загружает и анализирует следующий исправленный KML-файл (сохранить как test.kml )
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<Placemark>
<name>teste</name>
<LookAt>
<longitude>-47.82056628282606</longitude>
<latitude>-15.78921645504241</latitude>
<altitude>0</altitude>
<heading>0</heading>
<tilt>0</tilt>
<range>668.1932383230591</range>
</LookAt>
</Placemark>
</Document>
</kml>
Демонстрационный класс (сохранить в виде файла с именем ReadKml.java и поместить в тот же каталог, что и test.kml )
import java.io.*;
import org.jdom.input.SAXBuilder;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.xpath.XPath;
public class ReadKml {
public static void main(String args[]) throws Exception {
File kmlFile = new File("test.kml");
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(kmlFile);
XPath xPath = XPath.newInstance("//k:kml/k:Document/k:Placemark/k:LookAt");
xPath.addNamespace("k", document.getRootElement().getNamespaceURI());
Element node = (Element) xPath.selectSingleNode(document.getRootElement());
System.out.println(node.getName());
}
}
Демонстрационная версия требуетJDOM должен находиться на пути к классам для компиляции, например, в Windows, чтобы скомпилировать демонстрационный тип javac -cp jars\jdom.jar ReadKml.java
.Для запуска демонстрации также требуется Jaxen, поэтому добавьте его в classpath, например, java -cp .;jars\jdom.jar;jars\jaxen.jar ReadKml
В результате получается System.output LookAt
, который просто является Element.name()
.
Надеюсь, это поможет.