xml文件解析

xkllkxxkl 2016-03-10 05:29:00
求助各位大神,下面这段用xml怎么解析
<?xml version="1.0" encoding="utf-8"?>
<tasks>
<audio>
<priority>1</priority>
<requirement>
<service>XiMaLaYaService</service>
<service>AiSpeechService</service>
<service>DispatchStartService</service>
</requirement>
<Steps>
<service>DispatchStartService</service>
<service>XiMaLaYaService</service>
<service>DispatchEndService</service>
</Steps>
</audio>
<weather>
<priority>2</priority>
<requirement>
<service>YahooWeatherSService</service>
<service>AiSpeechService</service>
<service>DispatchStartService</service>
</requirement>
<Steps>
<service>DispatchStartService</service>
<service>YahooWeatherSService</service>
<service>DispatchEndService</service>
</Steps>
</weather>

</tasks>


做了点修改,修改后的如下,两个都可以

<?xml version="1.0" encoding="utf-8"?>
<tasks>
<Task>
<priority>1</priority>
<taskName>MusicTask</taskName>
<requirement>
<service>XiMaLaYaService</service>
<service>AiSpeechService</service>
<service>DispatchStartService</service>
</requirement>
<Steps>
<service>DispatchStartService</service>
<service>XiMaLaYaService</service>
<service>DispatchEndService</service>
</Steps>
</Task>

<Task>
<priority>2</priority>
<taskName>WeatherTask</taskName>
<requirement>
<service>YahooWeatherSService</service>
<service>AiSpeechService</service>
<service>DispatchStartService</service>
</requirement>
<Steps>
<service>DispatchStartService</service>
<service>YahooWeatherSService</service>
<service>DispatchEndService</service>
</Steps>
</Task>
</tasks>


千万别沉啊
...全文
221 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
画虎烂 2016-03-14
  • 打赏
  • 举报
回复
sax和pull解析都可以啊
xingzhong128 2016-03-14
  • 打赏
  • 举报
回复
xml 文件在android上推进啊使用pullparse,参考下面的 http://blog.csdn.net/luckily01/article/details/7723579
haha_321 2016-03-13
  • 打赏
  • 举报
回复
简单的写了一下,你自己看看吧
public class TaskSaxParser {

    public List<Task> parse(InputStream is) throws ParserConfigurationException, SAXException, IOException {
        SAXParserFactory spFactory = SAXParserFactory.newInstance();
        SAXParser parser = spFactory.newSAXParser();
        TaskHandler handler = new TaskHandler();
        parser.parse(is,handler);
        return  handler.getTasks();


    }


    class TaskHandler extends DefaultHandler{

        boolean isRequirement = false;
        List<Task> tasks ;
        Task task;
        StringBuilder sb;

        public List<Task> getTasks(){
            return  tasks;
        }

        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
            tasks = new ArrayList<Task>();
            sb = new StringBuilder();

        }

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);
            if(localName.equals("Task")){
                task = new Task();
            }
            if(localName.equals("requirement")){
                isRequirement = true;
            }
            if(localName.equals("Steps")){
                isRequirement = false;
            }
            sb.setLength(0);
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            super.endElement(uri, localName, qName);
            if(localName.equals("priority")){
                task.setPriority(Integer.parseInt(sb.toString()));
            }
            else if(localName.equals("taskName")){
                task.setTaskName(sb.toString());
            }
            else if(localName.equals("service") && isRequirement){
                task.getRequirement().add(sb.toString());
            }
            else if(localName.equals("service") && !isRequirement){
                task.getSteps().add(sb.toString());
            }
            else if (localName.equals("Task")) {
                tasks.add(task);
            }


        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);
            sb.append(ch,start,length);
        }
    }
}
public class Task {

    private int priority;
    private String taskName;
    private List<String> requirement = new ArrayList<>();
    private List<String> steps = new ArrayList<>();

    public List<String> getRequirement() {
        return requirement;
    }

    public void setRequirement(List<String> requirement) {
        this.requirement = requirement;
    }

    public int getPriority() {
        return priority;
    }

    public void setPriority(int priority) {
        this.priority = priority;
    }

    public String getTaskName() {
        return taskName;
    }

    public void setTaskName(String taskName) {
        this.taskName = taskName;
    }

    public List<String> getSteps() {
        return steps;
    }

    public void setSteps(List<String> steps) {
        this.steps = steps;
    }

    public String toString(){
        String requirementStr = "";
        for(String str:requirement){
            requirementStr = requirementStr + "**" +str;
        }
        return "priority:"+priority +" taskName:" +taskName + "requirementStr:" +requirementStr;
    }


}
xkllkxxkl 2016-03-13
  • 打赏
  • 举报
回复
好的,谢谢,
哎,真难 2016-03-11
  • 打赏
  • 举报
回复
引用 3 楼 xkllkxxkl 的回复:
[quote=引用 2 楼 heaimnmn 的回复:] 你不会解析哪里?这解析应该是个数组
我能说完全不会吗,要是Json还行[/quote]可以百度下sax解析方法,其实和解析json一样
xkllkxxkl 2016-03-10
  • 打赏
  • 举报
回复
千万别沉啊,
xkllkxxkl 2016-03-10
  • 打赏
  • 举报
回复
引用 2 楼 heaimnmn 的回复:
你不会解析哪里?这解析应该是个数组
我能说完全不会吗,要是Json还行
哎,真难 2016-03-10
  • 打赏
  • 举报
回复
你不会解析哪里?这解析应该是个数组

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧