【问题标题】:getting data from xml to java从xml获取数据到java
【发布时间】:2011-10-19 20:24:41
【问题描述】:

如何从 java 中使用 php 生成的 xml 中获取数据。 我需要将数据显示在我的 android 应用程序的列表视图中。

phpcode 从 mysqlquery 中获取数据并获取 variabel xml 中的数组并将其放在 echo 上。 mysqlquery 的数据通过 POST 来自 android 应用程序。

php代码:

//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>

谢谢!

【问题讨论】:

标签: java php android xml


【解决方案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 + '\'' +
                        '}';
            }
        }
    }
    

    其他选项包括 XStreamXMLBeans 用于更高级别的抽象,dom4jJDOM 用于较低级别的抽象——您必须在这些方面做更多的工作,但具有更大的灵活性。

    【讨论】:

    • 两点:JAXB 不能在 Android 上运行,而 Simple XML 是 Android IMO 上这项工作的最佳框架。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多