【鴻蒙】鴻蒙如何進行數據解析
【問題描述】有時候我們從服務器獲取是 xml 格式數據,我們需要將 xml 轉化成 model 對象,該如何使用呢?下面舉個例子說明一下,將分以下幾步進行
1.準備條件 創建xml文件,創建model對象,構建界面
2.數據進行解析操作(重點)
3.運行效果
第一步準備條件 創建 xml 文件,創建 model 對象,構建界面
1.1 在 rawfile 新建 xml 文件,代碼如下
?xml version="1.0" encoding="utf-8"??>
George/to?>
John/from?>
Reminder/heading?>
Don't forget the meeting!/body?> /note?>

1.2 新建 class model 代碼如下
package com.harmony.alliance.mydemo.model;
public class note {
private String from;
private String heading;
private String body;
private String to;
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getHeading() {
return heading;
}
public void setHeading(String heading) {
this.heading = heading;
}
@Override
public String toString() {
return "note{" +
"from='" + from + ''' +
", heading='" + heading + ''' +
", body='" + body + ''' +
", to='" + to + ''' +
'}';
}
}
1.3 新建數據的 abilityslice,xml 如下
?xml version="1.0" encoding="utf-8"??>
/DirectionalLayout?>
界面效果如下

第二步數據解析 2.1 參考資料如下
SAXParser
https://developer.harmonyos.com/cn/docs/documentation/doc-references/saxparser-0000001060039145
XMLReader https://developer.harmonyos.com/cn/docs/documentation/doc-references/xmlreader-0000001060837300
在上述四個接口中,最重要的就是 ContentHandler 這個接口,下面是對這個接口方法的說明:
// 設置一個可以定位文檔內容事件發生位置的定位器對象
public void setDocumentLocator(Locator locator)
// 用于處理文檔解析開始事件
public void startDocument()throws SAXException
// 處理元素開始事件,從參數中可以獲得元素所在名稱空間的 uri,元素名稱,屬性類表等信息
public void startElement(String namespacesURI , String localName , String qName , Attributes atts) throws SAXException
// 處理元素結束事件,從參數中可以獲得元素所在名稱空間的 uri,元素名稱等信息
public void endElement(String namespacesURI , String localName , String qName) throws SAXException
// 處理元素的字符內容,從參數中可以獲得內容
public void characters(char[] ch , int start , int length) throws SAXException
新建 SaxHelper 代碼如下
package com.harmony.alliance.mydemo.model;
import ohos.org.xml.sax.Attributes;
import ohos.org.xml.sax.SAXException;
import ohos.org.xml.sax.helpers.DefaultHandler;
/**
* Created by Jay on 2015/9/8 0008.
*/
public class SaxHelper extends DefaultHandler {
//當前解析的元素標簽
private String tagName = null;
private note mNote;
/**
* 當讀取到文檔開始標志是觸發,通常在這里完成一些初始化操作
*/
@Override
public void startDocument() throws SAXException {
mNote=new note();
}
/**
* 讀到一個開始標簽時調用,第二個參數為標簽名,最后一個參數為屬性數組
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.err.println("####===>>"+localName);
this.tagName = localName;
}
/**
* 讀到到內容,第一個參數為字符串內容,后面依次為起始位置與長度
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
//判斷當前標簽是否有效
if (this.tagName != null) {
String data = new String(ch, start, length);
//讀取標簽中的內容
if (this.tagName.equals("to")) {
mNote.setTo(data);
} else if (this.tagName.equals("from")) {
mNote.setFrom(data);
}else if(this.tagName.equals("heading")){
mNote.setHeading(data);
}else if(this.tagName.equals("body")){
mNote.setBody(data);
}
}
}
/**
* 處理元素結束時觸發,這里將對象添加到結合中
*/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
this.tagName = null;
}
/**
* 讀取到文檔結尾時觸發,
*/
@Override
public void endDocument() throws SAXException {
super.endDocument();
System.err.println("#####===>>"+mNote.toString());
// Log.i("SAX", "讀取到文檔尾,xml解析結束");
}
public note getmNote() {
return mNote;
}
}
AbilitySlice 代碼如下
package com.harmony.alliance.mydemo.slice;
import com.harmony.alliance.mydemo.ResourceTable;
import com.harmony.alliance.mydemo.model.SaxHelper;
import com.harmony.alliance.mydemo.model.note;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Component;
import ohos.agp.components.Text;
import ohos.javax.xml.parsers.SAXParser;
import ohos.javax.xml.parsers.SAXParserFactory;
import ohos.org.xml.sax.InputSource;
import ohos.org.xml.sax.XMLReader;
import java.io.InputStream;
import java.util.Locale;
public class myXmlParseAbilitySlice extends AbilitySlice {
private Text mStartParse,mTo,mfrom,mheading,mbody;
@Override
protected void onStart(Intent intent) {
super.onStart(intent);
setUIContent(ResourceTable.Layout_my_xml_parse);
mStartParse= (Text) findComponentById(ResourceTable.Id_mStartParse);
mTo= (Text) findComponentById(ResourceTable.Id_mTo);
mfrom= (Text) findComponentById(ResourceTable.Id_mfrom);
mheading= (Text) findComponentById(ResourceTable.Id_mheading);
mbody= (Text) findComponentById(ResourceTable.Id_mbody);
mStartParse.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
try {
String rawFilePath = "note.xml";
String filePath = String.format(Locale.ROOT, "assets/entry/resources/rawfile/%s", rawFilePath);
InputStream is = this.getClass().getClassLoader().getResourceAsStream(filePath);
InputSource is2=new InputSource(is);
SaxHelper ss = new SaxHelper();
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
SAXParser parser = factory.newSAXParser();
XMLReader xmlReader=parser.getXMLReader();
xmlReader.setContentHandler(ss);
xmlReader.parse(is2);
note mNote= ss.getmNote();
mTo.setText("to: "+mNote.getTo());
mfrom.setText("From: "+mNote.getFrom());
mheading.setText("heading: "+mNote.getHeading());
mbody.setText("body: "+mNote.getBody());
is.close();
}catch (Exception e){
e.printStackTrace();
}
}
});
}
}

審核編輯 黃宇
-
XML
+關注
關注
0文章
188瀏覽量
33431 -
Model
+關注
關注
0文章
342瀏覽量
25469 -
鴻蒙
+關注
關注
57文章
2464瀏覽量
43586 -
HarmonyOS
+關注
關注
79文章
2005瀏覽量
31705
發布評論請先 登錄
相關推薦
XML在HarmonyOS中的生成,解析與轉換(下)
【HarmonyOS IPC 試用連載 】鴻蒙系統初步了解
【HarmonyOS HiSpark AI Camera試用連載 】鴻蒙JS UI介紹
請教鴻蒙應用開發JAVA UI 框架ProgressBar或者RoundProgressBar怎么實現滑動調節
基于HarmonyOS Java UI使用元數據綁定框架實現UI和數據源的綁定
基于HarmonyOS Java UI,實現常見組件或者布局
鴻蒙應用開發入門資料合集
Java解析XML的一種數據綁定技術
java教程之GUI如何進行事件處理

鴻蒙版微信聊天UI效果實現!

評論