`

xml文件读写实例

    博客分类:
  • xml
阅读更多
这是一个目前在做的项目需要使用的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<String, List<String>> map = missionConfig.getEntityReg();
        List<String> 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<Seed> 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<String, List<String>> 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<String> 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文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<website name="taobao_mall" url="http://www.tmall.com/?ver=2011b">
  <taskName>caiji_tmall_精品男装_T恤</taskName>
  <seeds>
    <seed>
      <sortName>精品男装/T恤</sortName>
      <seedName>精品男装/T恤</seedName>
      <seedUrl>http://item.tmall.com/item.htm?id=9351702393</seedUrl>
    </seed>
  </seeds>
  <extractHtml>
      <path>div class="list item-view item-miniView"</path>
  </extractHtml>
  <fitUrls>
    <fit_url>http://www\.tmall\.com/go/act/tmall/iwanttobuy\.php.*</fit_url>
    <fit_url>http://list\.tmall\.com/.*</fit_url>
    <fit_url>http://item\.tmall\.com/item\.htm.*</fit_url>
  </fitUrls>
  <workingThreads>1</workingThreads>
  <pageEncoding>UTF-8</pageEncoding>
  <orien_lan>zh</orien_lan>
  <trans_lan>en</trans_lan>
  <pageUrlRegs>
    <pageUrl>http://www\.tmall\.com/go/act/tmall/iwanttobuy\.php.*</pageUrl>
  </pageUrlRegs>
  <pathElements>
    <commnents>
      <path>div class="tb-box tshop-psm tshop-psm-bdetailtabl" id="J_Detail"</path>
      <path>div id="reviews" class="J_DetailSection" data-reviewApi</path>
    </commnents>
    <shopAddr>
      <path>div class="clearfix tb-header-nav"</path>
      <path>div class="nav"</path>
      <path>a href</path>
    </shopAddr>
    <productDetail>
      <path>div id="attributes" class="attributes</path>
      <path>ul class="attributes-list</path>
      <path>li</path>
    </productDetail>
    <photosPath>
      <path>div class="tb-detail-bd tb-clear"</path>
      <path>div class="tb-gallery"</path>
      <path>div class="tb-booth tb-pic tb-s310"</path>
      <path>img id="J_ImgBooth" src</path>
    </photosPath>
    <category>
      <path>ul class="mallCrumbs-nav" id="J_crumbs"</path>
      <path>li class="mallCrumbs-nav-item"</path>
    </category>
    <countSold>
      <path>div class="tb-detail-bd tb-clear"</path>
      <path>ul class="tb-meta"</path>
      <path>li class="tb-sold-out tb-clear"</path>
    </countSold>
    <shopInfo>
      <path>div class="shop-intro"</path>
      <path>div class="extend"</path>
      <path>li</path>
    </shopInfo>
    <despPhos>
      <path>script</path>
    </despPhos>
    <thumbPhosPath>
      <path>div class="tb-detail-bd tb-clear"</path>
      <path>div class="tb-gallery"</path>
      <path>ul id="J_UlThumb" class="tb-thumb tb-clearfix"</path>
      <path>img src=</path>
    </thumbPhosPath>
    <productName>
      <path>div class="layout grid-s5m0 "</path>
      <path>div class="tb-detail-hd"</path>
      <path>a target="_blank" href=</path>
    </productName>
    <productPrice>
      <path>div class="tb-detail-bd tb-clear"</path>
      <path>ul class="tb-meta"</path>
      <path>li id="J_StrPriceModBox" class="tb-detail-price tb-clearfix"</path>
    </productPrice>
  </pathElements>
</website>



分享到:
评论

相关推荐

    xml 文件读写,有实例

    通过TinyXML读写这些配置,可以实现用户界面的个性化定制。 "XMLREDWP"可能是一个错误或遗漏,没有明确的上下文,但通常情况下,"WP"可能指的是Windows Phone或WordPress等,如果与XML文件读写有关,可能是涉及特定...

    c#读取操作XML实例 文件

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,广泛应用于Web服务、配置文件和数据交换等领域。本教程将通过一个具体的实例来介绍如何使用C#进行XML的操作。 首先,我们需要导入`System....

    xml文件读写demo

    XML(eXtensible Markup Language)...总之,这个"xml文件读写demo"项目是一个学习和实践C#中XML操作的实用资源,涵盖了从基本的XML读写到高级的序列化技术,对于任何希望掌握XML处理的开发者来说都是宝贵的参考资料。

    Python读写XML文件实例

    在IT行业中,XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它的...通过`generate_xml.py`和`read_xml.py`这样的代码实例,开发者可以深入了解XML文件的读写操作,并在实际项目中灵活应用。

    Xml文件读写示例

    这些类允许我们创建一个解析器实例并解析XML文件到内存中的DOM树。 2. **遍历DOM树**:解析完成后,我们可以使用`Document`对象遍历整个DOM树。`getElementsByTagName`或`getElementsByTagnameNS`方法用于查找特定...

    C# 中XML的读写实例

    本篇将深入探讨如何在C#中进行XML的读写操作,包括增加、删除和修改XML文档内容。 首先,要了解XML的基本结构,XML文档由元素(Element)、属性(Attribute)、文本内容(Text Content)等组成。在C#中,我们主要...

    C# XML文件读写操作-源码

    C# XML文件读写操作源码,以及如何调用,注释详解,有任何问题请留言, 以下截取xml文件和部分调用代码段: * ++++++++++++++++++++++++++++++++++++++ &lt;?xml version="1.0" encoding="utf-8" standalone="no"?&...

    xml文件读取实例源码

    本实例主要关注XML文件的读取,这对于处理数据交换、配置文件或者保存游戏进度等场景至关重要。下面将详细介绍XML文件读取的相关知识点。 首先,XML文件的结构是基于节点的,包括元素节点、属性节点、文本节点、...

    c#中对XML文件进行读写操作

    本篇文章将详细阐述如何在C#中进行XML文件的读写操作,包括基本概念、常用API以及实例演示。 首先,我们需要了解XML的基本结构。XML是一种自描述的语言,通过元素(Element)、属性(Attribute)和值(Value)来...

    java实现Xml文件读写

    本项目“java实现Xml文件读写”提供了一个完整的工程实例,包含了对XML文件进行添加、修改和读取的基本操作。 首先,要实现XML文件的读取,Java提供了`javax.xml.parsers`和`org.w3c.dom`这两个核心包。其中,`...

    VC 读写XML文件实例运用

    标题中的"VC 读写XML文件实例运用",意味着我们将探讨如何在VC++环境下,通过具体的代码实例实现XML文件的读取和写入。在描述中提到的两个工程启动文件——`.dsp`(Visual C++ 6的项目文件)和`.sln`(Visual Studio...

    读写XML文件实例 Javascript

    本实例中,我们将聚焦于`xml2js`库,它提供了将XML字符串转换为JavaScript对象以及反之的功能,非常适合读写XML文件。 首先,确保已经安装了`xml2js`库。在终端中运行以下命令: ```bash npm install xml2js ``` ...

    xml文件读写

    本篇文章将深入探讨如何利用 Delphi 和 `TStringList` 进行 XML 文件的读写操作。 一、XML 文件的基本结构 XML 文件由一系列元素组成,每个元素由开始标签和结束标签包围,例如 `&lt;element&gt;` 和 `&lt;/element&gt;`。元素...

    XML.rar_Csharp xml_c# xml文件读写_xml_xml读写_读写xml

    本教程将深入探讨如何使用C#进行XML文件的读写操作,这对于初学者来说是一份重要的学习资料。 在C#中,读取XML文件主要通过System.Xml命名空间中的类来实现。最常用的类包括XmlDocument、XmlNodeReader和XDocument...

    基于MFC的XML文档读写操作

    这是一个基于MFC的XML文档的读写封装类,利用了tinyXML的解析器进行解析,然后处理解析树,并将信息封装到了具体实例中,实现了对XML文档的读写操作。...如果对XML读写有疑惑可以下下来看一看~相信会有帮助

    XML文件的读写类

    本篇文章将详细探讨XML文件的读写操作,包括解析XML文档、创建XML文档、修改XML节点以及保存XML到文件。 1. XML文件的解析: - DOM(Document Object Model)模型:DOM将整个XML文件加载到内存中,形成一个树形...

    序列化方式XML文件读写

    在IT行业中,XML文件的读写是常见的任务,尤其是在需要持久化对象或跨平台通信时。序列化是将对象转换为可存储或传输的形式的过程,而反序列化则是相反的过程,将数据恢复为原始对象。本篇文章将详细讲解如何使用...

    如何读写XML文件,一个不错的实例

    在"实例118 如何读写XML文件"中,我们可以看到一个具体的代码示例,展示如何使用以上方法读取和写入XML文件。这个实例可能包括创建一个简单的XML文件,添加一些元素和属性,然后读取这些元素并打印它们的值,最后...

    VS之XML文件操作

    使用C#或VB.NET,可以使用`System.Xml.XmlDocument`类来加载XML文件,然后通过节点遍历和操作来读写数据。 4. **LINQ to XML**: - .NET Framework 提供了LINQ to XML,这是一种更现代、更简洁的API来处理XML。...

Global site tag (gtag.js) - Google Analytics