0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【JAVA UI】【HarmonyOS】【Demo】 鸿蒙如何进行 xml 解析

王程 来源:jf_75796907 作者:jf_75796907 2024-02-19 15:59 次阅读

鸿蒙】鸿蒙如何进行数据解析

【问题描述】有时候我们从服务器获取是 xml 格式数据,我们需要将 xml 转化成 model 对象,该如何使用呢?下面举个例子说明一下,将分以下几步进行

1.准备条件 创建xml文件,创建model对象,构建界面

2.数据进行解析操作(重点)

3.运行效果

第一步准备条件 创建 xml 文件,创建 model 对象,构建界面

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

< ?xml version="1.0" encoding="utf-8"? >

< note >

    < to >George< /to >

    < from >John< /from >

    < heading >Reminder< /heading >

    
Don't forget the meeting!< /body > < /note > 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 新建数据的 abilityslice,xml 如下

< ?xml version="1.0" encoding="utf-8"? >

< DirectionalLayout

    xmlns:ohos="http://schemas.huawei.com/res/ohos"

    ohos:height="match_parent"

    ohos:width="match_parent"

    ohos:orientation="vertical" >

    < Text

        ohos:id="$+id:mStartParse"

        ohos:height="100vp"

        ohos:width="match_parent"

        ohos:text="开始解析"

        ohos:text_size="20fp"

        ohos:text_color="#ffffff"

        ohos:text_alignment="center"

        ohos:background_element="#ed6262"/ >

    < Text

        ohos:id="$+id:mTo"

        ohos:height="100fp"

        ohos:width="match_parent"

        ohos:text_size="20fp"

        ohos:text_color="#ed6262"

        ohos:background_element="#ffffff"/ >

    < Text

        ohos:id="$+id:mfrom"

        ohos:height="100fp"

        ohos:width="match_parent"

        ohos:text_size="20fp"

        ohos:text_color="#ed6262"

        ohos:background_element="#ffffff"/ >

    < Text

        ohos:id="$+id:mheading"

        ohos:height="100fp"

        ohos:width="match_parent"

        ohos:text_size="20fp"

        ohos:text_color="#ed6262"

        ohos:background_element="#ffffff"/ >

 

    < Text

        ohos:id="$+id:mbody"

        ohos:height="100fp"

        ohos:width="match_parent"

        ohos:text_size="20fp"

        ohos:text_color="#ed6262"

        ohos:background_element="#ffffff"/ >

 

< /DirectionalLayout >

界面效果如下

wKgZomXTCemAX_9JAACGxXJw5uI462.png

第二步数据解析 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();

                }

            }

        });

    }

}
wKgZomXTCEiAHW0bAACmJ-I8yS8707.png

审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • XML
    XML
    +关注

    关注

    0

    文章

    183

    浏览量

    32936
  • Model
    +关注

    关注

    0

    文章

    324

    浏览量

    24793
  • 鸿蒙
    +关注

    关注

    55

    文章

    1640

    浏览量

    42123
  • HarmonyOS
    +关注

    关注

    79

    文章

    1856

    浏览量

    29267
收藏 人收藏

    评论

    相关推荐

    XMLHarmonyOS中的生成,解析与转换(下)

    一、XML 解析 对于以 XML 作为载体传递的数据,实际使用中需要对相关的节点进行解析,一般包括解析
    的头像 发表于 02-18 10:07 450次阅读

    HarmonyOS IPC 试用连载 】鸿蒙系统初步了解

    HarmonyOS设备支持的API也会有所不同1.1.4 鸿蒙的应用层HarmonyOS的应用由一个或多个FA(Feature Ability)或PA(Particle Ability)组成。其中,FA有
    发表于 01-04 17:25

    HarmonyOS HiSpark AI Camera试用连载 】鸿蒙JS UI介绍

    开发的FA应用,这里的FA应用特指JS FA应用。使用Java开发FA应用请参考Java UI框架。Framework前端框架层主要完成前端页面解析,以及提供MVVM
    发表于 01-11 20:10

    请教鸿蒙应用开发JAVA UI 框架ProgressBar或者RoundProgressBar怎么实现滑动调节

    如题https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java
    发表于 01-12 15:23

    基于HarmonyOS Java UI,实现常见组件或者布局

    技能要求Java基础开发能力XML布局文件编写能力2. 搭建HarmonyOS环境我们首先需要完成HarmonyOS开发环境搭建,可参照如下步骤进行
    发表于 10-09 14:13

    鸿蒙应用开发入门资料合集

    ,实现在第一张页面点击按钮跳转到第二张页面。在Java UI框架中,提供了两种编写布局的方式:在XML中声明UI布局和在代码中创建布局。这两种方式创建出的布局没有本质差别,都是我们需要
    发表于 03-22 11:23

    请问鸿蒙何进行native开发?

    鸿蒙何进行native开发,类似安卓的jni,有没有相关文档
    发表于 03-29 10:21

    鸿蒙应用开发的JS UI框架如何实现高德地图的访问?

    鸿蒙应用,现在分为Java UI框架和Ark UI框架,其中JS UI开发者框架Ark UI框架
    发表于 04-28 11:44

    鸿蒙应用ui布局

    请问,在用java开发鸿蒙应用布局UI时,怎么才能全屏布局(不显示labelb标题)
    发表于 09-20 22:09

    MTK自带的XML解析

    现在大多数软件都用xml作为配置文件,MTK本身也带了XML文件的解析,在此我不评说自带XML解析效率
    发表于 08-31 16:00 0次下载

    Java解析XML的一种数据绑定技术

    文中为了进一步用Java语言有效地解析XML文件,提出了一套XML文件与Java程序的绑定技术,通过该技术方法能够使开发人员方便地将
    发表于 08-29 14:44 0次下载

    java教程之GUI如何进行事件处理

    本文档的主要内容详细介绍的是java教程之GUI如何进行事件处理主要学习的是:1.Java事件和事件处理2.事件源、事件监听器、事件类型3.事件监听器接口和事件适配器4.内部类和匿名类在Jav
    发表于 09-28 17:15 13次下载
    <b class='flag-5'>java</b>教程之GUI如<b class='flag-5'>何进行</b>事件处理

    java教程之如何进行Java异常处理?

    本文档的主要内容详细介绍的是java教程之如何进行Java异常处理?
    发表于 09-28 17:16 0次下载

    鸿蒙版微信聊天UI效果实现!

      最近开发中要做一个类似微信聊天的工单系统客服中心界面(安卓版)所以想着也模仿一个鸿蒙版(基于 Java UI 的,JS UI 版本的后期更新哈) 那么废话不多数说我们正式开始。  
    的头像 发表于 11-15 09:35 3236次阅读
    <b class='flag-5'>鸿蒙</b>版微信聊天<b class='flag-5'>UI</b>效果实现!

    HarmonyOS中如何进行跨端迁移

       流转在 HarmonyOS 中泛指多设备分布式操作,也是 HarmonyOS 的亮点之一。      流转按体验可以分为跨端迁移和多端协同,这里主要跟大家讲一下如何进行跨端迁移,以及我在项目
    的头像 发表于 11-15 09:38 2150次阅读