XML解析的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹了XML解析的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的麻栗坡網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

在項(xiàng)目開發(fā)中,HTML的主要功能是進(jìn)行數(shù)據(jù)展示,而要進(jìn)行數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的規(guī)范化就需要使用XML。XML有自己的語法,而且所有的標(biāo)記元素都可以由用戶任意定義。

1、認(rèn)識(shí)XML

XML(eXtended Markup Language,可擴(kuò)展的標(biāo)記性語言)提供了一套跨平臺(tái)、跨網(wǎng)絡(luò)、跨程序的語言的數(shù)據(jù)描述方式,使用XML可以方便地實(shí)現(xiàn)數(shù)據(jù)交換、系統(tǒng)配置、內(nèi)容管理等常見功能。
XML與HTML類似,都屬于標(biāo)記性語言。大的不同時(shí)HTML中的元素都是固定的,且以顯示為主,而XML語言中的標(biāo)記都是由用戶自定義的,主要以數(shù)據(jù)保存為主。

XML解析的示例分析

XML和HTML的比較

實(shí)際上所有的XML文件都由前導(dǎo)區(qū)和數(shù)據(jù)區(qū)兩部分組成。
前導(dǎo)區(qū):規(guī)定出XML頁(yè)面的一些屬性,有以下3個(gè)屬性:

  • version:表示使用的XML版本,現(xiàn)在是1.0。

  • encoding:頁(yè)面中使用的文字編碼,如果有中文,則一定要指定編碼。

  • standalone:此XML文件是否是獨(dú)立運(yùn)行,如果需要進(jìn)行顯示可以使用CSS或XSL控制。

屬性出現(xiàn)的順序是固定的,version、encoding、standalone,一旦順序不對(duì),XML將出現(xiàn)錯(cuò)誤。

 <?xml version="1.0" encoding="GB2312" standalone="no"?>

數(shù)據(jù)區(qū):所有的數(shù)據(jù)區(qū)必須有一個(gè)根元素,一個(gè)根元素下可以存放多個(gè)子元素,但是要求每一個(gè)元素必須完結(jié),每一個(gè)標(biāo)記都是區(qū)分大小寫的。


XML語言中提供了CDATA標(biāo)記來標(biāo)識(shí)文件數(shù)據(jù),當(dāng)XML解析器處理到CDATA標(biāo)記時(shí),它不會(huì)解析該段數(shù)據(jù)中的任何符號(hào)或標(biāo)記,只是將原數(shù)據(jù)原封不動(dòng)的傳遞給應(yīng)用程序。
CDATA語法格式:

<![CDATA[]  不解析內(nèi)容  ]>
2、XML解析

在XML文件中由于更多的是描述信息的內(nèi)容,所以在得到一個(gè)XML文檔后用該利用程序按照其中元素的定義名稱取出對(duì)應(yīng)的內(nèi)容,這樣的操作就稱為XML解析。
在XML解析中W3C定義了SAX和DOM兩種解析方式,這兩種解析方式的程序操作如下:

XML解析的示例分析

XML解析操作

可以看出,應(yīng)用程序不是直接對(duì)XML文檔進(jìn)行操作的,而是首先由XML分析器對(duì)XML文檔進(jìn)行分析,然后應(yīng)用程序通過XML分析器所提供的DOM接口或SAX接口對(duì)分析結(jié)構(gòu)進(jìn)行操作,從而間接地實(shí)現(xiàn)了對(duì)XML文檔的訪問。

2.1、DOM解析操作

在應(yīng)用程序中,基于DOM  (Document Object Model,文檔對(duì)象模型)的XML分析器將一個(gè)XML文檔轉(zhuǎn)換成一個(gè)對(duì)象模型的集合(通常稱為DOM樹),應(yīng)用程勛正是通過對(duì)這個(gè)對(duì)象模型的操作,來實(shí)現(xiàn)對(duì)XML文檔數(shù)據(jù)的操作。通過DOM接口,應(yīng)用程序可以在任何時(shí)候訪問XML文檔中的任何一部分?jǐn)?shù)據(jù),因此,這種這種利用DOM接口的機(jī)制也被稱作隨機(jī)訪問機(jī)制。
由于DOM分析器把整個(gè)XML文檔轉(zhuǎn)化成DOM樹放在了內(nèi)存中,因此,當(dāng)文檔比較大或者結(jié)構(gòu)比較復(fù)雜時(shí),對(duì)內(nèi)存的需求就比較高,而且對(duì)于結(jié)構(gòu)復(fù)雜的樹的遍歷也是一項(xiàng)耗時(shí)的操作。
DOM操作會(huì)在內(nèi)存中將所有的XML文件變?yōu)镈OM樹。

在DOM解析中有以下4個(gè)核心的操作接口:

  • Document:此接口代表了整個(gè)XML文檔,表示整個(gè)DOM樹的根,提供了對(duì)文檔中的數(shù)據(jù)進(jìn)行訪問和操作的入口,通過Document節(jié)點(diǎn)可以訪問XML文件中所有的元素內(nèi)容。

XML解析的示例分析

Document接口的常用方法

  • Node:DOM操作的核心接口中有很大一部分是從Node接口繼承過來的。例如Document、Element、Attri等接口。在DOM樹中,每一個(gè)Node接口代表了DOM樹中的一個(gè)節(jié)點(diǎn)。

XML解析的示例分析

Node接口的常用方法

  • NodeList:此接口表示一個(gè)節(jié)點(diǎn)的集合,一般用于表示有順序關(guān)系的一組節(jié)點(diǎn)。例如,一個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn),當(dāng)文檔改變時(shí)會(huì)直接 影響到NodeList集合。

XML解析的示例分析

NodeList接口的常用方法

  • NameNodeMap:此接口表示一組節(jié)點(diǎn)和其唯一名稱對(duì)應(yīng)的一一對(duì)應(yīng)關(guān)系,主要用于屬性節(jié)點(diǎn)的表示。

出以上4個(gè)核心接口外,如果一個(gè)程序需要進(jìn)行DOM解析讀操作,則需要按如下步驟進(jìn)行:
(1)建立DocumentBuilderFactory:DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
(2)建立DocumentBuilder:DocumentBuilder builder = factory.newDocumentBuilder();
(3)建立Document:Document doc= builder.parse("要讀取的文件路徑");
(4)建立NodeList:NodeList nl = doc.getElementsByTagName("讀取節(jié)點(diǎn)");
(5)進(jìn)行XML信息讀取。

// xml_demo.xml

<?xml version="1.0" encoding="GBK"?>
<addresslist>
    <linkman>
        <name>小明</name>
        <email>asaasa@163.com</email>
    </linkman>
    <linkman>
        <name>小張</name>
        <email>xiaoli@163.com</email>
    </linkman>
</addresslist>

DOM完成XML的讀取。

package com.demo;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XmlDomDemo {
    public static void main(String[] args) {
        // (1)建立DocumentBuilderFactory,以用于取得DocumentBuilder
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // (2)通過DocumentBuilderFactory,取得DocumentBuilder
        DocumentBuilder builder = null;
        try {
            builder = factory.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }
        // (3)定義Document接口對(duì)象,通過DocumentBuilder類進(jìn)行DOM樹是轉(zhuǎn)換操作
        Document doc = null;
        try {
            // 讀取指定路徑的XML文件,讀取到內(nèi)存中
            doc = builder.parse("xml_demo.xml");
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // (4)查找linkman節(jié)點(diǎn)
        NodeList nl = doc.getElementsByTagName("linkman");
        // (5)輸出NodeList中第一個(gè)子節(jié)點(diǎn)中文本節(jié)點(diǎn)的內(nèi)容
        for (int i = 0; i < nl.getLength(); i++) {
            // 取出每一個(gè)元素    
            Element element = (Element) nl.item(i);
            System.out.println("姓名:" + element.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
            System.out.println("郵箱:" + element.getElementsByTagName("email").item(0).getFirstChild().getNodeValue());
        }
    }
}

DOM完成XML的文件輸出。
此時(shí)就需要使用DOM操作中提供的各個(gè)接口(如Element接口)并手工設(shè)置各個(gè)節(jié)點(diǎn)的關(guān)系,同時(shí)在創(chuàng)建Document對(duì)象時(shí)就必須使用newDocument()方法建立一個(gè)新的DOM樹。
如果現(xiàn)在需要將XML文件保存在硬盤上,則需要使用TransformerFactory、Transformer、DOMSource、StreamResult 4個(gè)類完成。
TransformerFactory類:取得一個(gè)Transformer類的實(shí)例對(duì)象。
DOMSource類:接收Document對(duì)象。
StreamResult 類:指定要使用的輸出流對(duì)象(可以向文件輸出,也可以向指定的輸出流輸出)。
Transformer類:通過該類完成內(nèi)容的輸出。

XML解析的示例分析

StreamResult類的構(gòu)造方法

package com.demo;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class XmlDemoWrite {

    public static void main(String[] args) {
        // (1)建立DocumentBuilderFactory,以用于取得DocumentBuilder
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // (2)通過DocumentBuilderFactory,取得DocumentBuilder
        DocumentBuilder builder = null;
        try {
            builder = factory.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }
        // (3)定義Document接口對(duì)象,通過DocumentBuilder類進(jìn)行DOM樹是轉(zhuǎn)換操作
        Document doc = null;
        // 創(chuàng)建一個(gè)新的文檔
        doc = builder.newDocument();
        // (4)建立各個(gè)操作節(jié)點(diǎn)
        Element addresslist = doc.createElement("addresslist");
        Element linkman = doc.createElement("linkman");
        Element name = doc.createElement("name");
        Element email = doc.createElement("email");
        // (5)設(shè)置節(jié)點(diǎn)的文本內(nèi)容,即為每一個(gè)節(jié)點(diǎn)添加文本節(jié)點(diǎn)
        name.appendChild(doc.createTextNode("小明"));
        email.appendChild(doc.createTextNode("xiaoming@163.com"));
        // (6)設(shè)置節(jié)點(diǎn)關(guān)系
        linkman.appendChild(name);
        linkman.appendChild(email);
        addresslist.appendChild(linkman);
        doc.appendChild(addresslist);
        // (7)輸出文檔到文件中
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer t = null;
        try {
            t = tf.newTransformer();
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        }
        // 設(shè)置編碼
        t.setOutputProperty(OutputKeys.ENCODING, "GBK");
        // 輸出文檔
        DOMSource source = new DOMSource(doc);
        // 指定輸出位置
        StreamResult result = new StreamResult(new File("xml_wirte.xml"));
        try {
            // 輸出
            t.transform(source, result);
            System.out.println("yes");
        } catch (TransformerException e) {
            e.printStackTrace();
        }
    }

}

生成文檔:

//xml_write.xml

<?xml version="1.0" encoding="GBK" standalone="no"?>
<addresslist>
    <linkman>
        <name>小明</name>
        <email>xiaoming@163.com</email>
    </linkman>
</addresslist>

2.2、SAX解析操作

SAX(Simple APIs for XML,操作XML的簡(jiǎn)單接口)與DOM操作不同的是,SAX采用的是一種順序的模式進(jìn)行訪問,是一種快速讀取XML數(shù)據(jù)的方式。
當(dāng)使用SAX 解析器進(jìn)行操作時(shí)會(huì)觸發(fā)一系列的事件。

XML解析的示例分析

SAX主要事件

當(dāng)掃描到文檔(Document)開始與結(jié)束、元素(Element)開始與結(jié)束時(shí)都會(huì)調(diào)用相關(guān)的處理方法,并由這些操作方法做出相應(yīng)的操作,直到整個(gè)文檔掃描結(jié)束。
如果在開發(fā)中想要使用SAX解析,則首先應(yīng)該編寫一個(gè)SAX解析器,再直接定義一個(gè)類,并使該類繼承自DefaultHandler類,同時(shí)覆寫上述的表中的方法即可。

package com.sax.demo;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class XmlSax extends DefaultHandler {
    @Override
    public void startDocument() throws SAXException {
        System.out.println("<?xml version=\"1.0\" encoding=\"GBK\"?>");
    }
    @Override
    public void endDocument() throws SAXException {
        System.out.println("\n 文檔讀取結(jié)束。。。");
    }
    @Override
    public void startElement(String url, String localName, String name,
            Attributes attributes) throws SAXException {
        System.out.print("<");
        System.out.print(name);
        if (attributes != null) {
            for (int x = 0; x < attributes.getLength(); x++) {
                System.out.print("" + attributes.getQName(x) + "=\"" + attributes.getValue(x) + "\"");
            }
        }
        System.out.print(">");
    }
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        System.out.print(new String(ch, start, length));
    }
    @Override
    public void endElement(String url, String localName, String name)
            throws SAXException {
        System.out.print("</");
        System.out.print(name);
        System.out.print(">");
    }
}

建荔灣SAX解析器后,還需要建立SAXParserFactory和SAXParser對(duì)象,之后通過SAXPaeser的parse()方法指定要解析的XML文件和指定的SAX解析器。

建立要讀取的文件:sax_demo.xml

<?xml version="1.0" encoding="GBK"?>
<addresslist>
    <linkman id="xm">
        <name>小明</name>
        <email>xiaoming@163.com</email>
    </linkman>
    <linkman id="xl">
        <name>小李</name>
        <email>xiaoli@163.com</email>
    </linkman>
</addresslist>

使用SAX解析器

package com.sax.demo;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class SaxTest {

    public static void main(String[] args) throws Exception {
        //(1)建立SAX解析工廠
        SAXParserFactory factory = SAXParserFactory.newInstance();
        //(2)構(gòu)造解析器
        SAXParser parser = factory.newSAXParser();
        //(3)解析XML使用handler
        parser.parse("sax_demo.xml", new XmlSax());
    }

}

通過上面的程序可以發(fā)現(xiàn),使用SAX解析比使用DOM解析更加容易。

XML解析的示例分析

DOM解析與SAX解析的區(qū)別

有兩者的特點(diǎn)可以發(fā)現(xiàn)兩者的區(qū)別:
DOM解析適合于對(duì)文件進(jìn)行修改和隨機(jī)存取的操作,但是不適合于大型文件的操作。
SAX采用部分讀取的方式,所以可以處理大型文件,而且只需要從文件中讀取特定內(nèi)容。SAX解析可以由用戶自己建立自己的對(duì)象模型。

2.3、XML解析的好幫手:jdom

jdom是使用Java編寫的,用于讀、寫、操作XML的一套組件。

jdom = dom 修改文件的有點(diǎn) + SAX讀取快速的優(yōu)點(diǎn)

XML解析的示例分析

jdom的主要操作類

使用jdom生成XML文件

package com.jdom.demo;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;


public class WriteXml {
    public static void main(String[] args) {
        // 定義節(jié)點(diǎn)
        Element addresslist = new Element("addresslist");
        Element linkman = new Element("linkman");
        Element name = new Element("name");
        Element email = new Element("email");
        // 定義屬性
        Attribute id = new Attribute("id", "xm");
        // 聲明一個(gè)Document對(duì)象
        Document doc = new Document(addresslist);
        // 設(shè)置元素的內(nèi)容
        name.setText("小明");
        email.setText("xiaoming@163.com");
        name.setAttribute(id);
        // 設(shè)置子節(jié)點(diǎn)
        linkman.addContent(name);
        linkman.addContent(email);
        // 將linkman加入根子節(jié)點(diǎn)
        addresslist.addContent(linkman);
        // 用來輸出XML文件
        XMLOutputter out = new XMLOutputter();
        // 設(shè)置輸出編碼
        out.setFormat(out.getFormat().setEncoding("GBK"));

        // 輸出XML文件
        try {
            out.output(doc, new FileOutputStream("jdom_write.xml"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
// jdom_write.xml

<?xml version="1.0" encoding="GBK"?>
<addresslist>
    <linkman>
        <name id="xm">小明</name>
        <email>xiaoming@163.com</email>
    </linkman>
</addresslist>

使用jdom讀取XML文件

package com.jdom.demo;

import java.io.IOException;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class ReadXml {

    public static void main(String[] args) throws JDOMException, IOException {
        //建立SAX解析
        SAXBuilder builder = new SAXBuilder();
        //找到Document
        Document readDoc = builder.build("jdom_write.xml");
        //讀取根元素
        Element stu = readDoc.getRootElement();
        //得到全部linkman子元素
        List list = stu.getChildren("linkman");
        for (int i = 0; i < list.size(); i++) {
            Element e = (Element) list.get(i);
            String name = e.getChildText("name");
            String id = e.getChild("name").getAttribute("id").getValue();
            String email = e.getChildText("email");
            System.out.println("----聯(lián)系人----");
            System.out.println("姓名:" + name + "編號(hào):" + id);
            System.out.println("Email:" + email);
        }
    }

}

jdom是一種常見的操作組件
在實(shí)際的開發(fā)中使用非常廣泛。

2.4、解析工具:dom4j

dom4j也是一組XML操作組件包,主要用來讀寫XML文件,由于dom4j性能優(yōu)異、功能強(qiáng)大,且具有易用性,所以現(xiàn)在已經(jīng)被廣泛地應(yīng)用開來。如,Hibernate、Spring框架中都使用了dom4j進(jìn)行XML的解析操作。
開發(fā)時(shí)需要引入的jar包:dom4j-1.6.1.jar、lib/jaxen-1.1-beta-6.jar

dom4j中的所用操作接口都在org.dom4j包中定義。其他包根據(jù)需要把選擇使用。

XML解析的示例分析

dom4j的主要接口

用dom4j生成XML文件:

package com.dom4j.demo;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class Dom4jWrite {
    public static void main(String[] args) {
        // 創(chuàng)建文檔
        Document doc = DocumentHelper.createDocument();
        // 定義個(gè)節(jié)點(diǎn)
        Element addresslist = doc.addElement("addresslist");
        Element linkman = addresslist.addElement("linkman");
        Element name = linkman.addElement("name");
        Element email = linkman.addElement("email");
        // 設(shè)置節(jié)點(diǎn)內(nèi)容
        name.setText("小明");
        email.setText("xiaoming@163.com");
        // 設(shè)置輸出格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        // 指定輸出編碼
        format.setEncoding("GBK");
        try {
            XMLWriter writer = new XMLWriter(new FileOutputStream(new File(
                    "dom4j_demo.xml")), format);
            writer.write(doc);
            writer.close();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
// dom4j_demo.xml

<?xml version="1.0" encoding="GBK"?>

<addresslist>
  <linkman>
    <name>小明</name>
    <email>xiaoming@163.com</email>
  </linkman>
</addresslist>

用dom4j讀取XML文件:

package com.dom4j.demo;

import java.io.File;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Dom4jRead {

    public static void main(String[] args) {
        //讀取文件
        File file = new File("dom4j_demo.xml");
        //建立SAX解析讀取
        SAXReader reader = new SAXReader();
        Document doc = null;
        try {
            //讀取文檔
            doc = reader.read(file);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        //取得根元素
        Element root = doc.getRootElement();
        //取得全部的子節(jié)點(diǎn)
        Iterator iter = root.elementIterator();
        while (iter.hasNext()) {
            //取得每一個(gè)linkman
            Element linkman = (Element) iter.next();
            System.out.println("姓名:"+linkman.elementText("name"));
            System.out.println("郵件地址:"+linkman.elementText("email"));
        }
    }

}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“XML解析的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章題目:XML解析的示例分析-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://muchs.cn/article14/csjcge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、手機(jī)網(wǎng)站建設(shè)、微信小程序企業(yè)建站、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)