PHP读取MySQL生成XML格式数据

        假设有如下一张植物信息表plant需要提供给第三方调用。

        生成xml的PHP代码如下:

<?php
error_reporting(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE);

$host = "localhost"; // 定义连接到的mysql服务器名
$user = "root"; // 定义用于连接的用户名
$pwd = "12345678"; // 定义用于连接的密码
$dbname = "leaf"; // 数据库名称,顶层元素
$dbtable = "plant"; // 数据表,要取得的节点
// 打开数据库连接
$connect = mysql_connect($host, $user, $pwd) or die("Couldn't connect Mysql server!");
@ MySQL_select_db($dbname, $connect);
@ MySQL_query("SET NAMES 'UTF-8'");
$query = "select * from " . $dbtable;
$result = @ MYSQL_QUERY($query) or die("Invalid query: " . mysql_error());

$fieldNum = mysql_num_fields($result); // 字段数
$resultNum = count($result); // 记录数

$dbtField = array (); // 数据表字段数组
// 获取表的各个字段名
for ($i = 0; $i < $fieldNum; $i++) {
	$dbtField[$i] = mysql_field_name($result, $i);
}
// 获取记录数组
$resArray = array ();
$index = 0;
while ($row = mysql_fetch_array($result)) {
	$resArray[$index] = $row;
	$index++;
}

//echo "<pre>";
//print_r($resArray);
//echo "</pre>";

// 建立xml, 声明版本和编码  
$dom = new DOMDocument("1.0", "utf-8");
// display document in browser as plain text
// for readability purposes
header("Content-Type: text/xml");
// 格式化输出
$dom->formatOutput = true;

// 建立根节点root
$root = $dom->createElement($dbname); //database name
$dom->appendChild($root);

foreach ($resArray as $res) {
	// 建立root节点下子节点record
	$record = $dom->createElement($dbtable);
	$root->appendChild($record);
	// 建立record节点下的各项
	for ($i = 0; $i < $fieldNum; $i++) {
		// 表字段
		$node[$i] = $dom->createElement($dbtField[$i]);
		// 表字段的值
		$node[$i]->appendChild($dom->createTextNode($res[$dbtField[$i]]));
		$record->appendChild($node[$i]);
	}
}
echo $dom->saveXML();
$dom->save("leaves.xml");

mysql_close();
?>

        生成的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<leaf>
  <plant>
    <Id>1</Id>
    <CommonName>Pubescent bamboo</CommonName>
    <ScientificName>Phyllostachys edulis (Carr.) Houz.</ScientificName>
    <CnName>毛竹</CnName>
    <Count>1</Count>
  </plant>
  <plant>
    <Id>2</Id>
    <CommonName>Chinese horse chestnut</CommonName>
    <ScientificName>Aesculus chinensis</ScientificName>
    <CnName>七叶树</CnName>
    <Count>3</Count>
  </plant>
  <plant>
    <Id>3</Id>
    <CommonName>True indigo</CommonName>
    <ScientificName>Indigofera tinctoria L.</ScientificName>
    <CnName>木蓝</CnName>
    <Count>5</Count>
  </plant>
  <plant>
    <Id>4</Id>
    <CommonName>Japanese maple</CommonName>
    <ScientificName>Acer Dalmatum</ScientificName>
    <CnName>鸡爪枫</CnName>
    <Count>7</Count>
  </plant>
</leaf>

要在Android Studio中读取MySQL数据并显示,需要执行以下步骤: 1. 在MySQL中创建一个表,并添加一些数据。 2. 在Android Studio中创建一个新项目,并添加以下依赖项: ``` implementation 'com.android.volley:volley:1.1.1' implementation 'com.google.code.gson:gson:2.8.6' ``` 3. 在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 4. 创建一个名为MySingleton的单例类,用于处理所有的Volley请求。在该类中添加以下代码: ``` public class MySingleton { private static MySingleton instance; private RequestQueue requestQueue; private static Context ctx; private MySingleton(Context context) { ctx = context; requestQueue = getRequestQueue(); } public static synchronized MySingleton getInstance(Context context) { if (instance == null) { instance = new MySingleton(context); } return instance; } public RequestQueue getRequestQueue() { if (requestQueue == null) { requestQueue = Volley.newRequestQueue(ctx.getApplicationContext()); } return requestQueue; } public <T> void addToRequestQueue(Request<T> req) { getRequestQueue().add(req); } } ``` 5. 创建一个名为MainActivity的活动,在该活动中添加以下代码: ``` public class MainActivity extends AppCompatActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.textView); String url = "http://yourdomain.com/get_data.php"; StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { Gson gson = new Gson(); Data[] data = gson.fromJson(response, Data[].class); StringBuilder sb = new StringBuilder(); for (Data d : data) { sb.append(d.getName()).append(" - ").append(d.getValue()).append("\n"); } textView.setText(sb.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { textView.setText(error.getMessage()); } }); MySingleton.getInstance(this).addToRequestQueue(stringRequest); } } ``` 6. 创建一个名为Data的Java类,用于表示MySQL表中的数据。 ``` public class Data { private String name; private int value; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } ``` 7. 在MySQL中创建一个名为get_data.php的文件,并添加以下代码: ``` <?php $servername = "localhost"; $username = "yourusername"; $password = "yourpassword"; $dbname = "yourdatabase"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT name, value FROM yourtable"; $result = $conn->query($sql); $rows = array(); while($r = mysqli_fetch_assoc($result)) { $rows[] = $r; } print json_encode($rows); $conn->close(); ?> ``` 在该文件中,将"yourusername"、"yourpassword"、"yourdatabase"、"yourtable"替换为你的MySQL用户名、密码、数据库名称和表名称。 运行该应用程序,将显示从MySQL表中检索到的数据
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值