получение данных из xml в java

#java #php #android #xml

#java #php #Android #xml

Вопрос:

Как я могу получить данные из xml, который генерируется с помощью php, в java. Мне нужны данные, чтобы отобразить их в listview в моем приложении для Android.

phpcode принимает данные из mysqlquery и извлекает массив в переменной xml и помещает его поверх echo out. Данные для mysqlquery взяты из приложения для Android через POST.

phpcode:

 //MySQL zugangsdaten
$server = "server";
$datenbank = "database";
$username = "username";
$passwort = "password";

//Verbindung zur MySqldatenbank herstellen
$link = mysql_connect($server, $username, $passwort);
if (!$link) die(mysql_error());

//Datenbank auswählen
$db = mysql_select_db($datenbank, $link);
//<---- End Login ---->

$_linie = htmlspecialchars(mysql_real_escape_string($_POST["linie"]), ENT_COMPAT);
$_richtung = htmlspecialchars(mysql_real_escape_string($_POST["richtung"]), ENT_COMPAT);

$sql_befehl = "SELECT * From Kontrolleure where linie = '$_linie' AND richtung = '$_richtung'";
$query = mysql_query($sql_befehl, $link);
if(mysql_error())
            {
                die(mysql_error());
            }

while($result = mysql_fetch_array($query, MYSQL_ASSOC))
        {   
            $count = $count   1;
            $xml = $xml."<Konduktor>";
            $xml = $xml."<id>".$result['id']."</id>";
            $xml = $xml."<linie>".$result['linie']."</linie>";
            $xml = $xml."<endstation>".$result['richtung']."</endstation>";
            $xml = $xml."<station>".$result['station']."</station>";
            $xml = $xml."<zeit>".$result['zeit']."</zeit>";
            $xml = $xml."</Konduktor>";
        }
echo "<Konduktors count="$count">";
echo $xml;
echo "</Konduktors>";
  

ответ xml выглядит следующим образом:

 <Konduktors count="3">
   <Konduktor>
      <id>29</id>
      <linie>S23</linie>
      <endstation>Langenthal</endstation>
      <station>Brugg AG</station>
      <zeit>17:36:34</zeit>
   </Konduktor>
   <Konduktor>
      <id>30</id>
      <linie>S23</linie>
      <endstation>Langenthal</endstation>
      <station>Lupfig</station>
      <zeit>17:37:12</zeit>
   </Konduktor>
   <Konduktor>
      <id>32</id>
      <linie>S23</linie>
      <endstation>Langenthal</endstation>
      <station>Birr</station>
      <zeit>16:23:30</zeit>
    </Konduktor>
</Konduktors>
  

Спасибо!

Комментарии:

1. Используйте XML-анализатор, как показано в куче руководств по всему Интернету .

2. Вы можете использовать XPath .

Ответ №1:

Для таких вещей существуют инструменты синтаксического анализа xml. В моей работе мы используем XMLBeans: http://xmlbeans.apache.org /

Я обнаружил, что использовать его довольно просто, и я в некотором роде любитель в таких вещах.

Ответ №2:

JAXB справился бы с этим легко:

 import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

public class JaxbExample {
    public static void main(String[] args) throws JAXBException {
        String xml =
                "<Konduktors count="3">n"  
                "   <Konduktor>n"  
                "      <id>29</id>n"  
                "      <linie>S23</linie>n"  
                "      <endstation>Langenthal</endstation>n"  
                "      <station>Brugg AG</station>n"  
                "      <zeit>17:36:34</zeit>n"  
                "   </Konduktor>n"  
                "   <Konduktor>n"  
                "      <id>30</id>n"  
                "      <linie>S23</linie>n"  
                "      <endstation>Langenthal</endstation>n"  
                "      <station>Lupfig</station>n"  
                "      <zeit>17:37:12</zeit>n"  
                "   </Konduktor>n"  
                "   <Konduktor>n"  
                "      <id>32</id>n"  
                "      <linie>S23</linie>n"  
                "      <endstation>Langenthal</endstation>n"  
                "      <station>Birr</station>n"  
                "      <zeit>16:23:30</zeit>n"  
                "    </Konduktor>n"  
                "</Konduktors>";
        Object object = JAXBContext.newInstance(Konduktors.class).createUnmarshaller().unmarshal(new StringReader(xml));
        System.out.println(object);
    }

    @XmlRootElement(name = "Konduktors")
    static class Konduktors {
        private List<Konductor> konductors = new ArrayList<Konductor>();

        @XmlElement(name = "Konduktor")
        public List<Konductor> getKonductors() {
            return konductors;
        }

        public void setKonductors(List<Konductor> konductors) {
            this.konductors = konductors;
        }

        @Override
        public String toString() {
            return "Konductors{"  
                    "konductors="   konductors  
                    '}';
        }
    }

    static class Konductor {
        private int id;
        private String linie;
        private String endstation;
        private String zeit;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getLinie() {
            return linie;
        }

        public void setLinie(String linie) {
            this.linie = linie;
        }

        public String getEndstation() {
            return endstation;
        }

        public void setEndstation(String endstation) {
            this.endstation = endstation;
        }

        public String getZeit() {
            return zeit;
        }

        public void setZeit(String zeit) {
            this.zeit = zeit;
        }

        @Override
        public String toString() {
            return "Konductor{"  
                    "id="   id  
                    ", linie='"   linie   '''  
                    ", endstation='"   endstation   '''  
                    ", zeit='"   zeit   '''  
                    '}';
        }
    }
}
  

Другие варианты включают XStream или XMLBeans для абстракций более высокого уровня и dom4j или JDOM для абстракций более низкого уровня — вам придется проделать больше работы с ними, но у вас будет намного больше гибкости.

Комментарии:

1. Два момента: JAXB не работает на Android, а Simple XML — лучший фреймворк для этой работы на Android IMO.