一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【JAVA UI】【HarmonyOS】【Demo】 鴻蒙如何進(jìn)行 xml 解析

王程 ? 來(lái)源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-19 15:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

鴻蒙】鴻蒙如何進(jìn)行數(shù)據(jù)解析

【問(wèn)題描述】有時(shí)候我們從服務(wù)器獲取是 xml 格式數(shù)據(jù),我們需要將 xml 轉(zhuǎn)化成 model 對(duì)象,該如何使用呢?下面舉個(gè)例子說(shuō)明一下,將分以下幾步進(jìn)行

1.準(zhǔn)備條件 創(chuàng)建xml文件,創(chuàng)建model對(duì)象,構(gòu)建界面

2.數(shù)據(jù)進(jìn)行解析操作(重點(diǎn))

3.運(yùn)行效果

第一步準(zhǔn)備條件 創(chuàng)建 xml 文件,創(chuàng)建 model 對(duì)象,構(gòu)建界面

1.1 在 rawfile 新建 xml 文件,代碼如下





    George

    John

    Reminder

    
Don't forget the meeting! wKgZomXTCWiAOM4KAAHN-csgQK0652.png

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 新建數(shù)據(jù)的 abilityslice,xml 如下





    

    

    

    

 

    

 


界面效果如下

wKgZomXTCemAX_9JAACGxXJw5uI462.png

第二步數(shù)據(jù)解析 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

在上述四個(gè)接口中,最重要的就是 ContentHandler 這個(gè)接口,下面是對(duì)這個(gè)接口方法的說(shuō)明:

// 設(shè)置一個(gè)可以定位文檔內(nèi)容事件發(fā)生位置的定位器對(duì)象

public void setDocumentLocator(Locator locator)

// 用于處理文檔解析開(kāi)始事件

public void startDocument()throws SAXException

// 處理元素開(kāi)始事件,從參數(shù)中可以獲得元素所在名稱(chēng)空間的 uri,元素名稱(chēng),屬性類(lèi)表等信息

public void startElement(String namespacesURI , String localName , String qName , Attributes atts) throws SAXException

// 處理元素結(jié)束事件,從參數(shù)中可以獲得元素所在名稱(chēng)空間的 uri,元素名稱(chēng)等信息

public void endElement(String namespacesURI , String localName , String qName) throws SAXException

// 處理元素的字符內(nèi)容,從參數(shù)中可以獲得內(nèi)容

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 {

    //當(dāng)前解析的元素標(biāo)簽

    private String tagName = null;

    private  note mNote;

 

    /**

     * 當(dāng)讀取到文檔開(kāi)始標(biāo)志是觸發(fā),通常在這里完成一些初始化操作

     */

    @Override

    public void startDocument() throws SAXException {

        mNote=new note();

    }

 

    /**

     * 讀到一個(gè)開(kāi)始標(biāo)簽時(shí)調(diào)用,第二個(gè)參數(shù)為標(biāo)簽名,最后一個(gè)參數(shù)為屬性數(shù)組

     */

    @Override

    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

        System.err.println("####===>>"+localName);

        this.tagName = localName;

    }

 

    /**

     * 讀到到內(nèi)容,第一個(gè)參數(shù)為字符串內(nèi)容,后面依次為起始位置與長(zhǎng)度

     */

 

    @Override

    public void characters(char[] ch, int start, int length) throws SAXException {

        //判斷當(dāng)前標(biāo)簽是否有效

        if (this.tagName != null) {

            String data = new String(ch, start, length);

            //讀取標(biāo)簽中的內(nèi)容

            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);

            }

 

        }

 

    }

 

    /**

     * 處理元素結(jié)束時(shí)觸發(fā),這里將對(duì)象添加到結(jié)合中

     */

    @Override

    public void endElement(String uri, String localName, String qName) throws SAXException {

        this.tagName = null;

    }

 

    /**

     * 讀取到文檔結(jié)尾時(shí)觸發(fā),

     */

    @Override

    public void endDocument() throws SAXException {

        super.endDocument();

        System.err.println("#####===>>"+mNote.toString());

//        Log.i("SAX", "讀取到文檔尾,xml解析結(jié)束");

    }

    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();

                }

            }

        });

    }

}
wKgZomXTCEiAHW0bAACmJ-I8yS8707.png

審核編輯 黃宇
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • XML
    XML
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    33737
  • Model
    +關(guān)注

    關(guān)注

    0

    文章

    343

    瀏覽量

    25747
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2617

    瀏覽量

    44036
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2126

    瀏覽量

    33004
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    XMLHarmonyOS中的生成,解析與轉(zhuǎn)換(下)

    一、XML 解析 對(duì)于以 XML 作為載體傳遞的數(shù)據(jù),實(shí)際使用中需要對(duì)相關(guān)的節(jié)點(diǎn)進(jìn)行解析,一般包括解析
    的頭像 發(fā)表于 02-18 10:07 ?1053次閱讀

    HarmonyOS AI輔助編程工具(CodeGenie)UI生成

    UI Generator基于BitFun Platform AI能力平臺(tái),用于快速生成可編譯、可運(yùn)行的HarmonyOS UI工程,支持基于已有UI布局文件(
    發(fā)表于 07-10 11:51

    HarmonyOS HiSpark AI Camera試用連載 】鴻蒙JS UI介紹

    開(kāi)發(fā)的FA應(yīng)用,這里的FA應(yīng)用特指JS FA應(yīng)用。使用Java開(kāi)發(fā)FA應(yīng)用請(qǐng)參考Java UI框架。Framework前端框架層主要完成前端頁(yè)面解析,以及提供MVVM
    發(fā)表于 01-11 20:10

    請(qǐng)教鴻蒙應(yīng)用開(kāi)發(fā)JAVA UI 框架ProgressBar或者RoundProgressBar怎么實(shí)現(xiàn)滑動(dòng)調(diào)節(jié)

    如題https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java
    發(fā)表于 01-12 15:23

    基于HarmonyOS Java UI,實(shí)現(xiàn)常見(jiàn)組件或者布局

    技能要求Java基礎(chǔ)開(kāi)發(fā)能力XML布局文件編寫(xiě)能力2. 搭建HarmonyOS環(huán)境我們首先需要完成HarmonyOS開(kāi)發(fā)環(huán)境搭建,可參照如下步驟進(jìn)行
    發(fā)表于 10-09 14:13

    鴻蒙應(yīng)用開(kāi)發(fā)入門(mén)資料合集

    ,實(shí)現(xiàn)在第一張頁(yè)面點(diǎn)擊按鈕跳轉(zhuǎn)到第二張頁(yè)面。在Java UI框架中,提供了兩種編寫(xiě)布局的方式:在XML中聲明UI布局和在代碼中創(chuàng)建布局。這兩種方式創(chuàng)建出的布局沒(méi)有本質(zhì)差別,都是我們需要
    發(fā)表于 03-22 11:23

    請(qǐng)問(wèn)鴻蒙何進(jìn)行native開(kāi)發(fā)?

    鴻蒙何進(jìn)行native開(kāi)發(fā),類(lèi)似安卓的jni,有沒(méi)有相關(guān)文檔
    發(fā)表于 03-29 10:21

    鴻蒙應(yīng)用開(kāi)發(fā)的JS UI框架如何實(shí)現(xiàn)高德地圖的訪問(wèn)?

    鴻蒙應(yīng)用,現(xiàn)在分為Java UI框架和Ark UI框架,其中JS UI開(kāi)發(fā)者框架Ark UI框架
    發(fā)表于 04-28 11:44

    鴻蒙應(yīng)用ui布局

    請(qǐng)問(wèn),在用java開(kāi)發(fā)鴻蒙應(yīng)用布局UI時(shí),怎么才能全屏布局(不顯示labelb標(biāo)題)
    發(fā)表于 09-20 22:09

    MTK自帶的XML解析

    現(xiàn)在大多數(shù)軟件都用xml作為配置文件,MTK本身也帶了XML文件的解析,在此我不評(píng)說(shuō)自帶XML解析效率
    發(fā)表于 08-31 16:00 ?0次下載

    Java解析XML的一種數(shù)據(jù)綁定技術(shù)

    文中為了進(jìn)一步用Java語(yǔ)言有效地解析XML文件,提出了一套XML文件與Java程序的綁定技術(shù),通過(guò)該技術(shù)方法能夠使開(kāi)發(fā)人員方便地將
    發(fā)表于 08-29 14:44 ?0次下載

    java教程之GUI如何進(jìn)行事件處理

    本文檔的主要內(nèi)容詳細(xì)介紹的是java教程之GUI如何進(jìn)行事件處理主要學(xué)習(xí)的是:1.Java事件和事件處理2.事件源、事件監(jiān)聽(tīng)器、事件類(lèi)型3.事件監(jiān)聽(tīng)器接口和事件適配器4.內(nèi)部類(lèi)和匿名類(lèi)在Jav
    發(fā)表于 09-28 17:15 ?13次下載
    <b class='flag-5'>java</b>教程之GUI如<b class='flag-5'>何進(jìn)行</b>事件處理

    java教程之如何進(jìn)行Java異常處理?

    本文檔的主要內(nèi)容詳細(xì)介紹的是java教程之如何進(jìn)行Java異常處理?
    發(fā)表于 09-28 17:16 ?0次下載

    鴻蒙版微信聊天UI效果實(shí)現(xiàn)!

    ? 最近開(kāi)發(fā)中要做一個(gè)類(lèi)似微信聊天的工單系統(tǒng)客服中心界面(安卓版)所以想著也模仿一個(gè)鴻蒙版(基于 Java UI 的,JS UI 版本的后期更新哈) 那么廢話(huà)不多數(shù)說(shuō)我們正式開(kāi)始。 ?
    的頭像 發(fā)表于 11-15 09:35 ?3988次閱讀
    <b class='flag-5'>鴻蒙</b>版微信聊天<b class='flag-5'>UI</b>效果實(shí)現(xiàn)!

    HarmonyOS 5 入門(mén)系列 】鴻蒙HarmonyOS示例項(xiàng)目講解

    HarmonyOS 5 入門(mén)系列 】鴻蒙HarmonyOS示例項(xiàng)目講解 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-07 11:57 ?148次閱讀
    【 <b class='flag-5'>HarmonyOS</b> 5 入門(mén)系列 】<b class='flag-5'>鴻蒙</b><b class='flag-5'>HarmonyOS</b>示例項(xiàng)目講解