J'essaie d'extraire le contenu d'un fichier gpx. Le problème est quand j'ai utilisé getChildren ("wpt") pour obtenir le contenu de wpt tag, je n'ai rien retourné. Et quand j'ai utilisé la méthode getChildren(), j'en ai eu et plusieurs sont revenus. Et quand j'ai enlevé tout le contenu dans le seul le laisser comme, tout fonctionne bien.Impossible d'obtenir le contenu de la balise enfant avec JDOM
Le contenu de ce fichier:
<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.0" creator="GPSBabel-
http://www.gpsbabel.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.topografix.com/GPX/1/0"
xsi:schemaLocation="http://www.topografix.com/GPX/1/0
http://www.topografix.com/GPX/1/0/gpx.xsd">
<time>2010-11-07T06:21:28Z</time>
<bounds minlat="40.516437500" minlon="-79.759539000"
maxlat="44.943992000" maxlon="-72.186828500"/>
<wpt lat="43.449895700" lon="-79.759539000">
<name>Pharmacy</name>
<cmt>Pharmacy</cmt>
<desc>Pharmacy</desc>
</wpt>
<wpt lat="43.650977000" lon="-79.758495300">
<name>Pharmacy:Walk-In Clinic</name>
<cmt>Pharmacy:Walk-In Clinic</cmt>
<desc>Pharmacy:Walk-In Clinic</desc>
</wpt>
<wpt lat="43.583929100" lon="-79.758268700">
<name>Hospital:Meadowvale Professional Center</name>
<cmt>Hospital:Meadowvale Professional Center</cmt>
<desc>Hospital:Meadowvale Professional Center</desc>
</wpt>
</gpx>
Ci-dessous mon code pour extraire le contenu:
import org.jdom.*;
import org.jdom.input.SAXBuilder;
import java.sql.*;
import java.util.*;
public class ReadXml
{
public Connection conn = null;
public Statement stmt = null ;
public void readXml()
{
try
{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/test?user=root&password=admin";//
conn = DriverManager.getConnection(url);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
}
catch(Exception sqlexception)
{
System.out.println("connection error !");
}
try
{
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build("new_york_Government_and_Public_Services.gpx");
Element root = doc.getRootElement();
String name = "" ,lat = "", lon = "";
Element elms = null;
List list1 = root.getChildren("wpt");
for(int i=0; i< list1.size(); i++)
{
elms = (Element)list1.get(i);
lat = elms.getAttributeValue("lat");
lon = elms.getAttributeValue("lon");
name = elms.getChildText("name");
String sql = "insert into poi_test(name,lat,lon)values ('"+name+"','"+lat+"','"+lon+"')";
stmt.executeUpdate(sql);
}//for
stmt.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
ReadXml rx = new ReadXml();
rx.readXml();
}
}
Hors sujet, mais que penses-tu du nom "Children's Hospital"? L'insertion de 'String sql =" dans les valeurs poi_test (name, lat, lon) ('' + nom + '', '' + lat + '', '' '+ lon +' ')'; '' est fragile (le '' ' dans "Children" terminera prématurément la chaîne de valeur), et sensible à l'injection SQL (combien pouvez-vous faire confiance à votre source pour le fichier gfx?). Recommandez PreparedStatement avec les paramètres '?' À la place. Recherche de "sql injection PreparedStatement" et vous trouverez beaucoup d'exemples. » –