0

0

xml文件读写实例

巴扎黑

巴扎黑

发布时间:2016-11-30 09:39:30

|

1496人浏览过

|

来源于php中文网

原创

这是一个目前在做的项目需要使用的xml文件读写实现。记起来以备后忘和供有需要的同学学习。 

xml文件读写类: 

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.lt.cj.config.entities.ConfigModel;
import org.lt.cj.config.entities.TMallConfigModel;
import org.lt.cj.core.Seed;
public class XMLConfigWriter {
    /*创建淘宝商城的配置文件*/
    public Document buildUpMallDocument(TMallConfigModel missionConfig) throws MissionConfigException, EnterUrlsException {
        if (missionConfig == null) {
            throw new MissionConfigException();
        } else if (missionConfig.getSeeds().isEmpty()) {
            return null;
        }
        // Create the root element
        Element rootElement = new Element("website");
        /* 设置网站属性 */
        /* 设置网站名称 */
        rootElement.setAttribute("name", missionConfig.getWebsiteName());
        /*设置网站地址*/
        rootElement.setAttribute("url", missionConfig.getWebsiteUrl());
        //添加任务名称
        Element taskElement = new Element("taskName");
        taskElement.addContent(missionConfig.getTaskName());
        rootElement.addContent(taskElement);
        //构造种子列表节点
        Element seeds = new Element("seeds");
        for (int i = 0; i < missionConfig.getSeeds().size(); i++) {
            Element seedElement = new Element("seed");
            Element seedNameElement = new Element("seedName");
            seedNameElement.addContent(missionConfig.getSeeds().get(i).getSeedName());
            Element seedUrlElement = new Element("seedUrl");
            seedUrlElement.addContent(missionConfig.getSeeds().get(i).getUrl());
            Element seedSortNameElement = new Element("sortName");
            seedSortNameElement.addContent(missionConfig.getSeeds().get(i).getSortName());
            seedElement.addContent(seedSortNameElement);
            seedElement.addContent(seedNameElement);
            seedElement.addContent(seedUrlElement);
            seeds.addContent(seedElement);
        }
        rootElement.addContent(seeds);
        //定义匹配的要采集的URL链接fitUrl的节点
        Element fiturls = new Element("fitUrls");
        for (int i = 0; i < missionConfig.getFitUrlRegs().size(); i++) {
            Element fitUrl = new Element("fit_url");
            fitUrl.addContent(missionConfig.getFitUrlRegs().get(i));
            fiturls.addContent(fitUrl);
        }
        rootElement.addContent(fiturls);//添加到根节点
        //并发工作线程数
        Element workingThreadsElement = new Element("workingThreads");
        workingThreadsElement.addContent("" + missionConfig.getWorkingThreads());
        rootElement.addContent(workingThreadsElement);//添加到根节点
        //定义页面编码节点
        Element pageEncodingElement = new Element("pageEncoding");
        pageEncodingElement.addContent(missionConfig.getPageEncoding());
        rootElement.addContent(pageEncodingElement);//添加到根节点
        //定义下载图片控制标志节点
        Element dwdPhoFlagElement = new Element("dwdPhoFlag");
        dwdPhoFlagElement.addContent(missionConfig.getDwdPhoFlag());
        rootElement.addContent(dwdPhoFlagElement);
        //定义原语言节点
        Element oriLan = new Element("orien_lan");
        oriLan.addContent(missionConfig.getOrigLanguage());
        Element transLan = new Element("trans_lan");
        transLan.addContent(missionConfig.getTranLanguage());
        rootElement.addContent(oriLan);//添加到根节点
        rootElement.addContent(transLan);//添加到根节点
        //定义匹配抓取信息的产品页面Url节点
        Element pageUrlRegs = new Element("pageUrlRegs");
        for (int i = 0; i < missionConfig.getPageReg().size(); i++) {
            Element pageUrl = new Element("pageUrl");
            pageUrl.addContent(missionConfig.getFitUrlRegs().get(i));
            pageUrlRegs.addContent(pageUrl);
        }
        rootElement.addContent(pageUrlRegs);//添加到根节点
        Map> map = missionConfig.getEntityReg();
        List list = null;
        Element pathElements = new Element("pathElements");
        //直接循环算啦
        //=====================================
        Iterator iter = map.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry e = (Map.Entry) iter.next();
            Element element = new Element(e.getKey() + "");
            map = missionConfig.getEntityReg();
            list = map.get(e.getKey() + "");
            for (int i = 0; i < list.size(); i++) {
                Element path = new Element("path");
                path.addContent(list.get(i));
                element.addContent(path);
            }
            pathElements.addContent(element);
        }
        rootElement.addContent(pathElements);
        /*   =====================================================   */
        Document myDocument = new Document(rootElement);
        return myDocument;
    }
    /* 创建文档文件 */
    public void createConfigFile(Document document, String filepath) {
        try {
            /* 定义XML输出器 */
            XMLOutputter xmlOutPutter = new XMLOutputter();
            xmlOutPutter.setFormat(Format.getPrettyFormat());
            File file = new File(filepath);
            if (!file.exists()) {
                if (file.createNewFile()) {
                    FileOutputStream fileOutputStream = new FileOutputStream(filepath);
                    xmlOutPutter.output(document, fileOutputStream);
                    return;
                }
            }
            FileOutputStream fileOutputStream = new FileOutputStream(filepath);
            xmlOutPutter.output(document, fileOutputStream);
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
    }
    /* 重写文件 */
    public void saveTask(String filePath, ConfigModel configModel) {
        try {
            TMallConfigModel tMallConfigModel = (TMallConfigModel) configModel;
            Document document = buildUpMallDocument(tMallConfigModel);
            if (document != null) {
                createConfigFile(document, filePath);
            }
        } catch (MissionConfigException ex) {
            Logger.getLogger(XMLConfigWriter.class.getName()).log(Level.SEVERE, null, ex);
        } catch (EnterUrlsException ex) {
            Logger.getLogger(XMLConfigWriter.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    //* xml文件读取方法 */
    public TMallConfigModel readMallDocument(String filePath) {
        TMallConfigModel model = new TMallConfigModel();
        SAXBuilder sb = new SAXBuilder();
        try {
            //读取基本配置信息
            Document doc = sb.build(filePath);           //构造文档对象
            Element root = doc.getRootElement();                     //获取根元素
            String websiteName = root.getAttributeValue("name");     //获取网站名称
            String websiteAddr = root.getAttributeValue("url");      //获取网站地址
            model.setWebsiteName(websiteName);                       //设置网站名称
            model.setWebsiteUrl(websiteAddr);                        //设置网站地址
            Element taskNameElement = root.getChild("taskName");     //获取任务名内容
            String taskName = taskNameElement.getText();
            model.setTaskName(taskName);
            //获取入口种子列表
            List seedList = new ArrayList();
            Element seedsElement = root.getChild("seeds");
            List list = seedsElement.getChildren();
            for (int i = 0; i < list.size(); i++) {
                Element element = (Element) seedsElement.getChildren().get(i);
                Seed seed = new Seed();
                Element seedNameElement = element.getChild("seedName");
                Element seedUrlElement = element.getChild("seedUrl");
                Element seedSortNameElement = element.getChild("sortName");
                seed.setSeedName(seedNameElement.getTextTrim());
                seed.setUrl(seedUrlElement.getTextTrim());
                seed.setSortName(seedSortNameElement.getTextTrim());
                Element parentSeedElement = element.getChild("parentSeed");
                if (parentSeedElement != null) {
                    Seed parentSeed = new Seed();
                    Element parentSeedNameElement = parentSeedElement.getChild("seedName");
                    Element parentSeedUrlElement = parentSeedElement.getChild("seedUrl");
                    Element parentSeedSortNameElement = parentSeedElement.getChild("sortName");
                    parentSeed.setSeedName(parentSeedNameElement.getText());
                    parentSeed.setUrl(parentSeedUrlElement.getTextTrim());
                    parentSeed.setSortName(parentSeedSortNameElement.getTextTrim());
                }
                seedList.add(seed);
            }
            model.setSeeds(seedList);
            //获取匹配的要抽取的页面的特定部分内容
            list = new ArrayList();
            Element extractHtmlElement = root.getChild("extractHtml");
            if (extractHtmlElement != null) {
                for (int i = 0; i < extractHtmlElement.getChildren().size(); i++) {
                    Element element = (Element) extractHtmlElement.getChildren().get(i);
                    list.add(element.getText());
                }
            }
            model.setExtractHtmlReg(list);
            //获取匹配URLs
            list = new ArrayList();
            Element fitUrlsElement = root.getChild("fitUrls");
            for (int i = 0; i < fitUrlsElement.getChildren().size(); i++) {
                Element element = (Element) fitUrlsElement.getChildren().get(i);
                list.add(element.getText());
            }
            model.setFitUrlRegs(list);
            //获取线程数量
            Element workingThreadsElement = root.getChild("workingThreads");
            String workingCount = workingThreadsElement.getText();
            model.setWorkingThreads(Integer.valueOf(workingCount));
            //获取解析编码
            Element pageEncodingElement = root.getChild("pageEncoding");
            String pageEncoding = pageEncodingElement.getText();
            model.setPageEncoding(pageEncoding);
            //获取是否下载图片的标志
            Element dwdPhoFlagElement = root.getChild("dwdPhoFlag");
            String dphoFlag = dwdPhoFlagElement.getText();
            model.setDwdPhoFlag(dphoFlag);
            //获取语言
            Element orien_lanElement = root.getChild("orien_lan");
            String orien = orien_lanElement.getText();
            model.setOrigLanguage(orien);
            Element trans_lanElement = root.getChild("trans_lan");
            String trans_lan = trans_lanElement.getText();
            model.setTranLanguage(trans_lan);
            //获取URL正则匹配
            Element pageUrlRegsElement = root.getChild("pageUrlRegs");
            list = new ArrayList();
            for (int i = 0; i < pageUrlRegsElement.getChildren().size(); i++) {
                Element element = (Element) pageUrlRegsElement.getChildren().get(i);
                list.add(element.getText());
            }
            model.setPageReg(list);
            //获取余下的匹配规则
            Map> entityReg = new HashMap();
            Element pathElements = root.getChild("pathElements");
            for (int i = 0; i < pathElements.getChildren().size(); i++) {
                Element element = (Element) pathElements.getChildren().get(i);
                List pathList = new ArrayList();
                String mapName = element.getName();
                for (int j = 0; j < element.getChildren().size(); j++) {
                    Element childElement = (Element) element.getChildren().get(j);
                    pathList.add(childElement.getText());
                }
                entityReg.put(mapName, pathList);
            }
            model.setEntityReg(entityReg);
        } catch (JDOMException ex) {
            Logger.getLogger(XMLConfigWriter.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(XMLConfigWriter.class.getName()).log(Level.SEVERE, null, ex);
        }
        return model;
    }
}

xml文件内容: 

字狐AI
字狐AI

由GPT-4 驱动的AI全能助手,支持回答复杂问题、撰写邮件、阅读文章、智能搜索

下载


  caiji_tmall_精品男装_T恤
  
    
      精品男装/T恤
      精品男装/T恤
      http://item.tmall.com/item.htm?id=9351702393
    
  
  
      div class="list item-view item-miniView"
  
  
    http://www\.tmall\.com/go/act/tmall/iwanttobuy\.php.*
    http://list\.tmall\.com/.*
    http://item\.tmall\.com/item\.htm.*
  
  1
  UTF-8
  zh
  en
  
    http://www\.tmall\.com/go/act/tmall/iwanttobuy\.php.*
  
  
    
      div class="tb-box tshop-psm tshop-psm-bdetailtabl" id="J_Detail"
      div id="reviews" class="J_DetailSection" data-reviewApi
    
    
      div class="clearfix tb-header-nav"
      div class="nav"
      a href
    
    
      div id="attributes" class="attributes
      ul class="attributes-list
      li
    
    
      div class="tb-detail-bd tb-clear"
      div class="tb-gallery"
      div class="tb-booth tb-pic tb-s310"
      img id="J_ImgBooth" src
    
    
      ul class="mallCrumbs-nav" id="J_crumbs"
      li class="mallCrumbs-nav-item"
    
    
      div class="tb-detail-bd tb-clear"
      ul class="tb-meta"
      li class="tb-sold-out tb-clear"
    
    
      div class="shop-intro"
      div class="extend"
      li
    
    
      script
    
    
      div class="tb-detail-bd tb-clear"
      div class="tb-gallery"
      ul id="J_UlThumb" class="tb-thumb tb-clearfix"
      img src=
    
    
      div class="layout grid-s5m0 "
      div class="tb-detail-hd"
      a target="_blank" href=
    
    
      div class="tb-detail-bd tb-clear"
      ul class="tb-meta"
      li id="J_StrPriceModBox" class="tb-detail-price tb-clearfix"
    
  

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

3

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

8

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

6

2026.02.03

c语言中/相关合集
c语言中/相关合集

本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

2

2026.02.03

漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题
漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题

本专题围绕漫蛙漫画(Manwa / Manwa2)官网网页版入口进行整理,涵盖漫蛙漫画官方主页访问方式、网页版在线阅读入口、台版正版漫画浏览说明及基础使用指引,帮助用户快速进入漫蛙漫画官网,稳定在线阅读正版漫画内容,避免误入非官方页面。

5

2026.02.03

Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口
Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口

本专题汇总了俄罗斯知名搜索引擎 Yandex 的官网入口、免登录访问地址、中文登录方法与网页版使用指南,帮助用户稳定访问 Yandex 官网,并提供一站式入口汇总。无论是登录入口还是在线搜索,用户都能快速获取最新稳定的访问链接与使用指南。

36

2026.02.03

Java 设计模式与重构实践
Java 设计模式与重构实践

本专题专注讲解 Java 中常用的设计模式,包括单例模式、工厂模式、观察者模式、策略模式等,并结合代码重构实践,帮助学习者掌握 如何运用设计模式优化代码结构,提高代码的可读性、可维护性和扩展性。通过具体示例,展示设计模式如何解决实际开发中的复杂问题。

2

2026.02.03

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

2

2026.02.03

Python 强化学习与深度Q网络(DQN)
Python 强化学习与深度Q网络(DQN)

本专题深入讲解 Python 在强化学习(Reinforcement Learning)中的应用,重点介绍 深度Q网络(DQN) 及其实现方法,涵盖 Q-learning 算法、深度学习与神经网络的结合、环境模拟与奖励机制设计、探索与利用的平衡等。通过构建一个简单的游戏AI,帮助学习者掌握 如何使用 Python 训练智能体在动态环境中作出决策。

2

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
XML教程
XML教程

共142课时 | 6.3万人学习

XQuery 教程
XQuery 教程

共12课时 | 3.8万人学习

XLink  教程
XLink 教程

共7课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号