Thứ Tư, 4 tháng 7, 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 cú pháp 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ả chúng android khuyên dùng XMLPullParser vì nó hiệu quả và dễ sử dụng. Vì vậy, chúng ta sẽ sử dụng XMLPullParser để phân tích cú pháp XML.

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

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 một tệp XML và mô tả của chúng.

Sr.NoThành phần & mô tả
1Prolog

Một tệp XML bắt đầu bằng phần mở đầu. 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ể là như thế này. Bắt đầu tài liệu, Tài liệu kết thúc, Bắt đầu từ khóa, 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à văn bản trong thẻ quốc gia.
4Thuộc tính

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 chúng ta đầu tiên 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 xác đị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 nó 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, Thuộc tínhValue vv Vì vậy, XMLPullParser có một hàm riêng biệt để 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ề kiểu sự kiện xảy ra. Ví dụ: Tài liệu bắt đầu, bắt đầu từ khóa vv Phương thức getName trả về tên của thẻ và vì chúng ta chỉ quan tâm đến nhiệt độ, vì vậy chúng ta chỉ cần kiểm tra trong câu lệnh có điều kiện là nếu chúng ta có thẻ nhiệt độ, chúng ta gọi phương thức getAttributeValue trả về cho chúng ta 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 lớp này cung cấp để phân tích cú pháp các tệp XML tốt hơn. Những phương pháp này được liệt kê dưới đây

Sr.NoPhương pháp & mô tả
1getAttributeCount ()

Phương thức này chỉ trả về số thuộc tính của thẻ bắt đầu hiện tại
2getAttributeName (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ố 8getName ()

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

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 TEXT hiện tại chỉ chứa các ký tự khoảng trắng.

Thí dụ

Đâ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 Android studio để tạo ứ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 bên dưới Assets Folder / file.xml
5Sửa đổi Android Manifest.xml để thêm quyền internet cần thiết
6Chạy ứng dụng và chọn 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 đã 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 Assets / 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 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 Android Manifest.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 cho rằng bạn đã tạo AVD của mình trong khi thiết lập môi trường.

Để chạy ứng dụng từ Android studio, 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 ứng dụng và nếu mọi thứ đều ổn với thiết lập và ứng dụng của bạn, ứng dụng sẽ hiển thị cửa sổ Trình mô phỏng sau

NIIT-ICT
ảnh minh họa

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