Thứ Bảy, 15 tháng 12, 2018

Android - Trình phân tích cú pháp XML

XML là viết tắt của Extensible Mark-up Language.XML là một định dạng rất phổ biến và thường được sử dụng để chia sẻ dữ liệu trên internet. Chương này giải thích cách phân tích tệp XML và trích xuất thông tin cần thiết từ nó.

Học lập trình Android cung cấp ba loại trình phân tích cú pháp XML là DOM, SAX và XMLPullParser . Trong số tất cả, Android khuyên dùng XMLPullParser vì nó hiệu quả và dễ sử dụng. Vì vậy, chúng tôi sẽ sử dụng XMLPullParser để phân tích cú pháp XML.

Học lập trình Android
Học lập trình Android
Bước đầu tiên là xác định các trường trong dữ liệu XML mà bạn quan tâm. Ví dụ. Trong XML được đưa ra dưới đây, chúng tôi chỉ quan tâm đến việc nhận nhiệt độ.
<?xml version="1.0"?>
<current>
   
   <city id="2643743" name="London">
      <coord lon="-0.12574" lat="51.50853"/>
      <country>GB</country>
      <sun rise="2013-10-08T06:13:56" set="2013-10-08T17:21:45"/>
   </city>
   
   <temperature value="289.54" min="289.15" max="290.15" unit="kelvin"/>
   <humidity value="77" unit="%"/>
   <pressure value="1025" unit="hPa"/>
</current>

XML - Các phần tử

Một tệp xml bao gồm nhiều thành phần. Đây là bảng xác định các thành phần của tệp XML và mô tả của chúng.

Không.Thành phần và mô tả
1Prolog

Một tệp XML bắt đầu bằng một prolog. Dòng đầu tiên chứa thông tin về một tệp là prolog
2Sự kiện
Một tệp XML có nhiều sự kiện. Sự kiện có thể như thế này. Tài liệu bắt đầu, Tài liệu kết thúc, Bắt đầu thẻ, Kết thúc thẻ và Văn bản, v.v.
3Bản văn

Ngoài các thẻ và sự kiện, và tệp xml cũng chứa văn bản đơn giản. Chẳng hạn như GB là một văn bản trong thẻ quốc gia.
4Thuộc tính

Các thuộc tính là các thuộc tính bổ sung của thẻ, chẳng hạn như giá trị, v.v.

XML - Phân tích cú pháp

Trong bước tiếp theo, chúng ta sẽ tạo đối tượng XMLPullParser, nhưng để tạo ra, trước tiên chúng ta sẽ tạo đối tượng XmlPullParserFactory và sau đó gọi phương thức newPullParser () của nó để tạo XMLPullParser. Cú pháp của nó được đưa ra dưới đây

private XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
private XmlPullParser myparser = xmlFactoryObject.newPullParser();

Bước tiếp theo liên quan đến việc chỉ định tệp cho XmlPullParser có chứa XML. Nó có thể là một tập tin hoặc có thể là một Stream. Trong trường hợp của chúng tôi, đó là một cú pháp stream.Its được đưa ra dưới đây

myparser.setInput(stream, null);

Bước cuối cùng là phân tích cú pháp XML. Một tệp XML bao gồm các sự kiện, Tên, Văn bản, AttributionValue, v.v ... Vì vậy, XMLPullParser có một chức năng riêng để phân tích từng thành phần của tệp XML. Cú pháp của nó được đưa ra dưới đây
int event = myParser.getEventType();
while (event != XmlPullParser.END_DOCUMENT)  {
   String name=myParser.getName();
   switch (event){
      case XmlPullParser.START_TAG:
      break;
      
      case XmlPullParser.END_TAG:
      if(name.equals("temperature")){
         temperature = myParser.getAttributeValue(null,"value");
      }
      break;
   }   
   event = myParser.next();      
}
Phương thức getEventType trả về loại sự kiện xảy ra. ví dụ: Bắt đầu tài liệu, bắt đầu thẻ, v.v ... 

Phương thức getName trả về tên của thẻ và vì chúng tôi chỉ quan tâm đến nhiệt độ, vì vậy chúng tôi chỉ kiểm tra tuyên bố có điều kiện rằng nếu chúng tôi có thẻ nhiệt độ, chúng tôi gọi phương thức getAttributionValue để trả lại cho chúng tôi giá trị của thẻ nhiệt độ.

Ngoài các phương thức này, còn có các phương thức khác được cung cấp bởi lớp này để phân tích cú pháp các tệp XML tốt hơn. Các phương pháp này được liệt kê dưới đây

Không.Phương pháp & mô tả
1getAttributionCount ()

Phương thức này chỉ trả về số lượng thuộc tính của thẻ bắt đầu hiện tại
2getAttributionName (chỉ mục int)
Phương thức này trả về tên của thuộc tính được chỉ định bởi giá trị chỉ mục
3getColumnNumber ()

Phương thức này trả về Trả về số cột hiện tại, bắt đầu từ 0.
4getDepth ()
Phương thức này trả về Trả về độ sâu hiện tại của phần tử.
5getLineNumber ()
Trả về số dòng hiện tại, bắt đầu từ 1.
6getNamespace ()

Phương thức này trả về URI không gian tên của phần tử hiện tại.
7getPrefix ()
Phương thức này trả về tiền tố của phần tử hiện tại
số 8lấy tên ()

Phương thức này trả về tên của thẻ
9lấy văn bản ()

Phương thức này trả về văn bản cho phần tử cụ thể đó
10isWhitespace ()
Phương pháp này kiểm tra xem sự kiện văn bản hiện tại chỉ chứa các ký tự khoảng trắng.
Dưới đây là một ví dụ minh họa việc sử dụng XML DOM Parser. Nó tạo ra một ứng dụng cơ bản cho phép bạn phân tích cú pháp XML.

Để thử nghiệm với ví dụ này, bạn có thể chạy nó trên một thiết bị thực tế hoặc trong một trình giả lập.

Các bướcSự miêu tả
1Bạn sẽ sử dụng studio Android để tạo một ứng dụng Android theo gói com.example.sairamkrishna.myapplication.
2Sửa đổi tệp src / MainActivity.java để thêm mã cần thiết.
3Sửa đổi res / layout / Activity_main để thêm các thành phần XML tương ứng
4Tạo một tệp XML mới trong Tài sản thư mục / tệp XML
5Sửa đổi AndroidManifest.xml để thêm quyền internet cần thiết
6Chạy ứng dụng và chọn một thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả
Sau đây là nội dung của tệp hoạt động chính được sửa đổi MainActivity.java.
package com.example.sairamkrishna.myapplication;

import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
   TextView tv1;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      tv1=(TextView)findViewById(R.id.textView1);
  
      try {
         InputStream is = getAssets().open("file.xml");

         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
         DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
         Document doc = dBuilder.parse(is);

         Element element=doc.getDocumentElement();
         element.normalize();

         NodeList nList = doc.getElementsByTagName("employee");
   
         for (int i=0; i<nList.getLength(); i++) {

            Node node = nList.item(i);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
               Element element2 = (Element) node;
               tv1.setText(tv1.getText()+"\nName : " + getValue("name", element2)+"\n");
               tv1.setText(tv1.getText()+"Surname : " + getValue("surname", element2)+"\n");
               tv1.setText(tv1.getText()+"-----------------------");
            }
         }
   
      } catch (Exception e) {e.printStackTrace();}

   }
 
   private static String getValue(String tag, Element element) {
      NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes();
      Node node = nodeList.item(0);
      return node.getNodeValue();
   }

}
Sau đây là nội dung của Tài sản / file.xml .
<?xml version="1.0"?>
<records>
   <employee>
      <name>Sairamkrishna</name>
      <surname>Mammahe</surname>
      <salary>50000</salary>
   </employee>
 
   <employee>
      <name>Gopal </name>
      <surname>Varma</surname>
      <salary>60000</salary>
   </employee>
 
   <employee>
      <name>Raja</name>
      <surname>Hr</surname>
      <salary>70000</salary>
   </employee>
 
</records>
Sau đây là nội dung được sửa đổi của xml res / layout / Activity_main.xml.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context=".MainActivity">

   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" />
</RelativeLayout>
Sau đây là nội dung của tệp AndroidManifest.xml .
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      
      </activity>
   
   </application>
</manifest>
Hãy thử chạy ứng dụng của chúng tôi, chúng tôi vừa sửa đổi. Tôi giả sử bạn đã tạo AVD của mình trong khi thực hiện thiết lập môi trường.

Để chạy ứng dụng từ studio Android, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào biểu tượng Chạy từ thanh công cụ.

Android studio cài đặt ứng dụng trên AVD của bạn và khởi động nó và nếu mọi thứ đều ổn với thiết lập và ứng dụng của bạn, nó sẽ hiển thị theo cửa sổ Trình mô phỏng

Không có nhận xét nào:

Đăng nhận xét

Lập trình Android - RenderScript

Trong chương này, chúng ta sẽ tìm hiểu về Android RenderScript. Thông thường các ứng dụng trên Android được thiết kế để tiêu thụ tài nguyên ...