收藏 分销(赏)

XML 学习之总结[知识整理]).doc

上传人:xrp****65 文档编号:6278382 上传时间:2024-12-04 格式:DOC 页数:28 大小:300KB 下载积分:10 金币
下载 相关 举报
XML 学习之总结[知识整理]).doc_第1页
第1页 / 共28页
XML 学习之总结[知识整理]).doc_第2页
第2页 / 共28页


点击查看更多>>
资源描述
Document 方法 abort 方法说明 取消一个进行中的异步下载 基本语法 xmlDocument.abort(); 语法说明 如果这个方法在异步下载时被呼叫,所有的解析动作会停止,而且在内存中的文件会被释放。 使用范例   appendChild 方法说明 加上一个节点当作指定节点最后的子节点 基本语法 xmlDocumentNode.appendChild(newChild); 语法说明 newChild 是附加子节点的地址。 使用范例 docObj = xmlDoc.documentElement; alert(docObj.xml); objNewNode = docObj. appendChild(xmlDoc. documentElement.firstChild); alert(docObj.xml); cloneNode 方法说明 建立指定节点的复制。 基本语法 xmlDocumentNode.cloneNode(deep); 语法说明 deep 是一个布尔值。如果为true,此节点会复制以指定节点发展出去的所有节点。如果是false,只有指定的节点和它的属性被复制。 使用范例 currNode = xmlDoc.documentElement.childNodes.item(1); objClonedNode = currNode.cloneNode(1); alert(objClonedNode.xml); createAttribute 方法说明 建立一个指定名称的属性。 基本语法 xmlDocument.createAttribute(name); 语法说明 name 是被建立属性的名称。 使用范例 objNewAtt = xmlDoc.createAttribute("encryption"); alert(objNewAtt.xml); createCDATASection 方法说明 建立一个包含特定数据的CDATA。 基本语法 xmlDocument.createCDATASection(data); 语法说明 data 是一个字符串,且包含了被置放在CDATA 的资料。 使用范例 objNewCDATA = xmlDoc.createCDATASection("This is a CDATA Section"); alert(objNewCDATA.xml); createComment 方法说明 建立一个包含指定数据的批注。 基本语法 xmlDocument.createComment(data); 语法说明 data 是一个字符串,且包含了被置放在批注的资料。 使用范例 objNewComment = xmlDoc.createComment("This is a comment"); alert(objNewComment.xml); createDocumentFragment 方法说明 建立一个空的文件片断对象。 基本语法 xmlDocument.createDocumentFragment(); 语法说明 一个新的文件片断被建立,但没有加到文件树中。要加入片断到文件树中,必须使用插入方法,例如insertBefore、replaceChild 或appendChild。 使用范例 objNewFragment = xmlDoc.createDocumentFragment(); alert(objNewFragment.xml); createElement 方法说明 建立一个指定名称的元素。 基本语法 xmlDocument.createElement(tagName); 语法说明 tagName 是一个区分大小写的字符串来指定新元素名称。 使用范例 objNewElement = xmlDoc.createElement("TO"); alert(objNewElement.xml); createEntityReference 方法说明 建立一个参照到指定名称的实体。 基本语法 xmlDocument.createEntityReference(name); 语法说明 name 是一个区分大小写的字符串,来指定新实体引用的名称。一个新的实体引用被建立,但是并没有被加到文件树中。若要将实体引用加到文件树中,必须使用一种插入方法,例如:insertBefore,replaceChild,或appendChild。 使用范例 objNewER = xmlDoc.createEntityReference("eRef"); alert(objNewER.xml); createNode 方法说明 建立一个指定型态、名称,及命名空间的新节点。 基本语法 xmlDocument.createNode(type, name, nameSpaceURI); 语法说明 type 用来确认要被建立的节点型态,name 是一个字符串来确认新节点的名称,命名空间的前缀则是选择性的。nameSpaceURI 是一个定义命名空间URI 的字符串。如果前缀被包含在名称参数中,此节点会在nameSpaceURI 的内文中以指定的前缀建立。如果不包含前缀,指定的命名空间会被视为预设的命名空间。 使用范例 objNewNode = xmlDoc.createNode(1, "TO", ""); alert(objNewNode.xml); createProcessingInstruction 方法说明 建立一个新的处理指令,包含了指定的目标和数据。 基本语法 xmlDocument.createProcessingInstruction(target, data); 语法说明 target 是表示目标、名称或处理指令的字符串。Data 是表示处理指令的值。一个新的处理指令被建立,但是并没有加到文件树中。要把处理指令加到文件树中,必须使用插入方法,例如:insertBefore、replaceChild,或是appendChild。 使用范例 objNewPI = xmlDoc.createProcessingInstruction(‘XML’, ‘version="1.0"’); alert(objNewPI.xml); createTextNode 方法说明 建立一个新的text 节点,并包含指定的数据。 基本语法 xmlDocument.createTextNode(data); 语法说明 data 是一个代表新text 节点的字符串。一个新的text 节点被建立,但是没有加到文件树中。若要将节点加到文件树中,必须使用插入方法,例如:insertBefore,replaceChild或appendChild。 使用范例 objNewTextNode = xmlDoc.createTextNode("This is a text node."); alert(objNewTextNode.xml); getElementsByTagName 方法说明 传回指定名称的元素集合。 基本语法 objNodeList = xmlDocument. getElementsByTagName (tagname); 语法说明 tagname 是一个字符串,代表找到的元素卷标名称。使用tagname "*"传回文件中所有找到的元素。 使用范例 objNodeList = xmlDoc.getElementsByTagName("*"); alert(objNodeList.item(1).xml); hasChildNodes 方法说明 如果指定的节点有一个或更多子节点,传回值为true。 基本语法 boolValue = xmlDocumentNode.hasChildNodes() ; 语法说明 如果此节点有子节点传回值为true,否则传回false 值。 使用范例 boolValue = xmlDoc.documentElement.hasChildNodes(); alert(boolValue); insertBefore 方法说明 在指定的节点前插入一个子节点。 基本语法 objDocumentNode = xmlDocumentNode.insertBefore(newChild,refChild); 语法说明 newChild 是一个包含新子节点地址的对象,refChild 是参照节点的地址。新子节点被插到参照节点之前。如果refChild 参数没有包含在内,新的子节点会被插到子节点列表的末端。 使用范例 objRefNode = xmlDoc.documentElement; alert(xmlDoc.xml); objNewNode = xmlDoc.createComment("This is a comment"); xmlDoc.insertBefore(objNewNode, objRefNode); alert(xmlDoc.xml); load 方法说明 表示从指定位置加载的文件。 基本语法 boolValue = xmlDocument.load(url); 语法说明 url 包含要被加载档案的URL 的字符串。假如文件加载成功,传回值即为true。若加载失败,传回值为false。 使用范例 boolValue = xmlDoc.load("LstA_1.xml"); alert(boolValue); loadXML 方法说明 加载一个XML 文件或字符串的片断。 基本语法 boolValue = xmlDocument.loadXML(xmlString); 语法说明 xmlString 是包含XML 文字码的字符串。这个字符串可以包含整个文件或者只是一个文件片断。如果文件加载成功,传回值为true。假如加载失败,传回值则是false。 使用范例 xmlString = "<GREETING> <MESSAGE> Hello! </MESSAGE> </GREETING>"; boolValue = xmlDoc.loadXML(xmlString); alert(boolValue); nodeFromID 方法说明 传回节点ID 符合指定值的节点。 基本语法 xmlDocumentNode = xmlDocument.nodeFromID(idString); 语法说明 idString 是一个包含ID 值的字符串。符合的节点必定是ID 型态。若符合,将传回一个对象;若操作失败,则传回null。 使用范例 objDocumentNode = xmlDoc.nodeFromID("TO"); alert(objDocumentNode); parsed 方法说明 会验证该指定的节点(node)及其衍生的子节点(descendants)是否已被解析过。 基本语法 boolValue = xmlDocumentNode.parsed(); 语法说明 如果全部的节点都已经被解析过了,则传回值为ture;如果有任何一个节点尚未被解析,传回值则为false。 使用范例 currNode = xmlDoc.documentElement.childNodes.item(0); boolValue = currNode.parsed(); alert(boolValue); removeChild 方法说明 会将指定的节点从节点清单中移除。 基本语法 objDocumentNode = xmlDocumentNode.removeChild(oldChild); 语法说明 oldChild 为一个包含要被移除的节点对象。 使用范例 objRemoveNode = xmlDoc.documentElement.childNodes.item(3); alert(xmlDoc.xml); xmlDoc.documentElement.removeChild(objRemoveNode); alert(xmlDoc.xml); replaceChild 方法说明 置换指定的旧子节点为提供的新子节点。 基本语法 objDocumentNode = xmlDocumentNode.replaceChild(newChild,oldChild); 语法说明 newChild 为包含新子节点的对象。如果此参数为null,则此旧子节点会被移除而不会被取代。oldChild 为包含旧子节点的对象。 使用范例 objOldNode = xmlDoc.documentElement.childNodes.item(3); objNewNode = xmlDoc.createComment("I''ve replaced the BCC element."); alert(xmlDoc.xml); xmlDoc.documentElement.replaceChild(objNewNode,objOldNode); alert(xmlDoc.xml); selectNodes 方法说明 传回所有符合提供样式(pattern)的节点。 基本语法 objDocumentNodeList = xmlDocumentNode.selectNodes(patternString); 语法说明 patternString 为一包含XSL 样式的字符串。此方法会传回节点清单对象,包含符合样式的节点。如果没有符合的节点,则传回空的清单列表。 使用范例 objNodeList=xmlDoc.selectNodes("/"); alert(objNodeList.item(0).xml); selectSingleNode 方法说明 传回第一个符合样式的节点。 基本语法 objDocumentNode = xmlDocumentNode. selectSingleNode (patternString); 语法说明 patternString 为一包含XSL 样式的字符串。此方法会传回第一个符合的节点对象,如果没有符合的节点,则传回null。 使用范例 objNode = xmlDoc.selectSingleNode("EMAIL/BCC"); alert(objNode.xml); transformNode 方法说明 使用提供的样式表来处理该节点及其子节点。 基本语法 strTransformedDocument = xmlDocumentNode.transformNode(stylesheet); 语法说明 stylesheet 为一XML 文件或是片断包含负责节点转换工作的XSL 元素。此方法会传回一包含转换结果的字符串。 使用范例 var style = new ActiveXObject("Microsoft.XMLDOM"); style.load("LstA_49.xsl"); strTransform = xmlDoc.transformNode(style.documentElement); alert(strTransform); Document 事件 ondataavailable 事件说明 该事件会在XML 文件有效时被触发。 基本语法 该事件有下面三种处理方式 .Inline:<element ondataavailable = handler>; .Event property:object.ondataavailable = handler; .Named script:<SCRIPT FOR = object EVENT = ondataavailable>; 语法说明 ondataavailable 事件只要一获得有效的数据就会被触发。这项技术并未说明在这个文件中有多少数据是有效的。 使用范例 xmlDoc.ondataavailable = alert("Data is now available."); onreadystatechange 事件说明  这个事件会在readyState 属性内容改变时被触发。 基本语法  此一事件有如下三种处理方式(与ondataavailable相似): . Inline:<element onreadystatechange = handler>; . Event property:object.onreadystatechange = handler; . Named script:<SCRIPT FOR = object EVENT = onreadystatechange>; 语法说明 onreadystatechange 事件在readyState 属性内容改变时就会被触发,但这个事件并未说明「准备好」的状态是什么。必须使用readyState 属性来取得现在的状态。 使用范例 xmlDoc.onreadystatechange = alert("The readyState property is" + xmlDoc.readyState); nodeList 对象的属性 length 属性说明 length 属性是nodeList 对象的唯一属性 基本语法 传回集合中项目的个数。 语法说明 intValue = xmlNodeList.length; 使用范例 objNodeList = xmlDoc.documentElement.childNodes; alert(objNodeList.length); nodeList 对象的方法 item 方法说明 存取文件树中的单一节点。 基本语法 objDocumentNode = xmlNodeList.item(index); 语法说明 index 为长整数指定子节点的index(0-based)。 使用范例 objNode = xmlDoc.documentElement.childNodes.item(2); alert(objNode.xml); nextNode 方法说明 存取集合中的下一个节点。 基本语法 objDocumentNode = xmlNodeList.nextNode(); 语法说明 传回包含下一个节点的对象。若无法取得下一个节点则传回null。 使用范例 objNode = xmlDoc.documentElement.childNodes; objNextNode = objNode.nextNode(); alert(objNextNode.xml); objNextNode = objNode.nextNode(); alert(objNextNode.xml); reset 方法说明 重新设定节点清单列表中的索引(index)指针。 基本语法 objDocumentNode = xmlNodeList.reset(); 语法说明 设定节点清单列表中的指针指向第一个节点的前面。 使用范例 objNode = xmlDoc.documentElement.childNodes; objNextNode = objNode.nextNode(); alert(objNextNode.xml); objNode.reset(); objNextNode = objNode.nextNode(); alert(objNextNode.xml); parseError 对象的属性 parseError 对象传回最后一个解析错误的信息。 要示范parseError 对象如何运作,需要使用一份有错误的XML 文件,下面是一份保有Cc、Bcc 元素的电子邮件文件,根据DTD 这是一篇错误的电子邮件文件。 <?xml version="1.0"?> <!DOCTYPE EMAIL SYSTEM "LstA_2.dtd"> <EMAIL PRIORITY="HIGH"> <TO>Jodie@</TO> <FROM>Bill@</FROM> <BCC>Naomi@</BCC> <CC>Philip@</CC> <SUBJECT>My document is a tree.</SUBJECT> <BODY>This is an example of a tree structure.</BODY> </EMAIL> errorCode 属性说明 传回最后一个解析错误的错误码。 基本语法 intErrorValue = xmlDocument.parseError.errorCode; 语法说明 此属性只读且会传回一长整数。 使用范例 intParseValue = xmlDoc.parseError.errorCode; alert(intParseValue); filePos 属性说明 传回档案中错误发生的位置。 基本语法 intErrorValue = xmlDocument.parseError.filePos; 语法说明 此一属性只读,且会传回表示绝对位置的长整数(以字符数表示)。 使用范例 intParseValue = xmlDoc.parseError.filePos; alert(intParseValue); Line 属性说明 传回错误发生所在的行数。 基本语法 intErrorValue = xmlDocument.parseError.line; 语法说明 此一属性只读,且会传回表示错误发生所在行数的长整数。 使用范例 intParseValue = xmlDoc.parseError.line; alert(intParseValue); linePos 属性说明 传回错误发生在行中的哪个位置。 基本语法 intErrorValue = xmlDocument.parseError.linePos; 语法说明 此一属性只读,且会传回一长整数表示错误发生在行中的哪一个字符位置。 使用范例 intParseValue = xmlDoc.parseError.linePos; alert(intParseValue); reason 属性说明 传回最后一个错误发生的原因。 基本语法 strErrorReason = xmlDocument.parseError.reason; 语法说明 此一属性只读,且会传回最后一个解析错误发生原因的叙述字符串。 使用范例 strErrorReason = xmlDoc.parseError.reason; alert(strErrorReason); srcText 属性说明 传回错误发生处该行的文字。 基本语法 strSrcText = xmlDocument.parseError.srcText; 语法说明 此一属性只读。传回错误发生处该行完整的文字,而且包含空格。 使用范例 strSrcText = xmlDoc.parseError.srcText; alert(strSrcText); xml学习总结之一 1.1 为什么要学习xml XML 发展的非常迅速,这实在令人感到惊奇,有很多的软件开发商都采用了 XML 标准。我们相信,在未来的 Web 开发中, XML 将和 HTML 一样受到重视,他们都是 Web 技术的基础。就连无线标记语言 (WML , The Wireless Markup Language ), [ 用于标识运行于手持设备上(比如:手机)的 Internet 程序 ] , WML 都采用了 XML 的标准。 XML 将成为最普遍的数据操纵和数据传输的工具。 1.2 什么是XML XML 是 EXtensible Markup Language 的缩写。 XML 使用文档类型定义( DTD )或者模式( Schema )来描述数据 。 XML 使用 DTD 或者 Schema 后就是自描述的语言 。 1.3 XML 和HTML的主要区别 XML 是被设计用来描述数据的,重点是:什么是数据,如何存放数据。 HTML 是被设计用来显示数据的,重点是:显示数据以及如何显示数据更好上面。 他们在格式上也存在巨大区别,相对讲 xml 格式要求严格: a. 所有的 XML 文档必须有一个结束标记 开始标签和结束标签必须配套,也就是必须写成 或者 。 b. 空元素必须关闭 不允许出现单标签,但标签必须关闭,关闭使用 或者 。 c. 所有标签都区分大小写 d. 所有标签都必须合理嵌套 层次合理比如 这样就合理。 e. 所有标签的属性值必须使用双引号 (””) 或者但引号括起来 f.  xml 只能有一个根元素 1.4 XML 文档组成 xml 文档在逻辑上主要有以下 5 个部分组成: 1.xml 声明 xml 文档总是以一个 xml 声明开始,其中指明所用的 xml 版本、文档的编码、文档的独立性信息。格式为: 注意那个 档中使用的元素不是固定的,那么两个不同的 XML 文档使用同一个名字来描述不同类型的元素的情况就可能发生。而这种情况又往往会导致命名冲突。   [ 简单的说解决方法就是给相同名称元素加上不同的前缀 ] 有以下两种形式的名称空间声明: (1)       第一种形式: < 元素名 xmlns : prefixname=”URI”> 元素名是指你在哪个元素上声明名称空间,其中 URI 不能为空 ( “” ) 。   (2)       第二种形式: < 元素名 xmlns=”URI”> 其中 URI 可以为空(“”)。  eg: ApplesBananas 关于之后的解析 xml ,比如 DOM 、 SAX 、 JAXP 等方式,以及 xsl 转换的应用,这里暂时不总结。因为目前自己的工作中应用那方面的内容很少。而且对于解析 xml ,也总结有现成的代码了。下次用时,直接代码重用。 This entry was posted on Wednesday, April 18th, 2007 at 10:40 pm and now 224 Views. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site. 1 . XML 与 DTD —— XML 入门知识 | 1.1 为什么要学习xml XML 发展的非常迅速,这实在令人感到惊奇,有很多的软件开发商都采用了 XML 标准。我们相信,在未来的 Web 开发中, XML 将和 HTML 一样受到重视,他们都是 Web 技术的基础。 XML 将成为最普遍的数据操纵和数据传输的工具。 1.2 什么是XML    XML 是 EXtensible Markup Language 的缩写。 XML 使用文档类型定义( DTD )或者模式( Schema )来描述数据 。 XML 使用 DTD 或者 Schema 后就是自描述的语言 。                                                                                                  1.3 XML 和HTML的主要区别 XML 是被设计用来描述数据的,重点是:什么是数据,如何存放数据。 HTML 是被设计用来显示数据的,重点是:显示数据以及如何显示数据更好上面。  他们在格式上也存在巨大区别,相对讲 xml 格式要求严格: a. 所有的 XML 文档必须有一个结束标记 开始标签和结束标签必须配套,也就是必须写成 <p></p> 或者 <high></ high > 。 b. 空元素必须关闭 不允许出现单标签,但标签必须关闭,关闭使用 <p/> 或者 <high/> 。 c. 所有标签都区分大小写 d. 所有标签都必须合理嵌套 层次合理比如 <p><high></high></p> 这样就合理。 e. 所有标签的属性值必须使用双引号 (””) 或者但引号括起来 f.  xml 只能有一个根元素 1.4 XML 文档组成 xml 文档在逻辑上主要有以下 5 个部分组成: 1.xml 声明 xml 文档总是以一个 xml 声明开始,其中指明所用的 xml 版本、文档的编码、文档的独立性信息。格式为: <?xml version=”1.0” encoding=”gb2312” standalone=”yes”?> 其中需要注意的是在问号左右两边不能有空格。 还有其默认编码是 utf8 yes 表示文档是独立文档,即不依赖于外部文档。 2. 文档类型声明 我们可以用 DTD ( Document Type Definition 文档类型定义)来规范 xml 文档中元素和属性的规则及相互关系。 XML 从 SGML ( Standard Generalized Markup Language,SGML 标准通用标记语言)继承了用于定义语法规则的 DTD 机制。几乎所有的 xml 应用都是使用 DTD 来定义的。 DTD 文件也是一个文本文件,通常用 ”.dtd” 作为其扩展名。 通过文档类型声明,指出 xml 文档所用的 DTD 。文档类型声明有两种形式,一种是声明 DTD 在一个外部文件中,例如: <!DOCTYPE greeting SYSTEM “hello.dtd”> 另 1 种是直接在 xml 给出 dtd ,例如: <!DOCTYPE greeting [ <!ELEMENT greeting  (#PCDATA)> ]> 3. 元素 XML 元素命名必须遵守下面的规则: 元素的名字可以包含子母,数字和其他字符。 元素的名字不能以数字或者标点符号开头。 元素的名字不能以 XML( 或者 xml , Xml,xMl...) 开头。 元素的名字不能包含空格。 尽量不用冒号,冒号在名称空间中用于分隔名称空间前缀和本地部分。   有 2 个细节: 1.  CDATA 段 CDATA 段中包含的都是纯字符数据,在字符数据可以出现的任何地方都可以使用 CDATA 段。 CDATA 段主要用于需要将整个文本解释为字符数据而不是标记的情况下。 CDATA 段以字符串 ”<![CDATA[  ” 开始, ”]]>” 结束。 2.  字符引用和预定义实体引用 xml 有 5 个特殊字符,小于 < 、大于 > 、双引号 ” 、单引号 ’ 、和号 & 。在数据中需要使用这几个字符时候可以用通用字符引用和预定义引用: 请参考:表 1-1 特殊字符的字符引用和预定义实体引用 字符 字符引用 10 进制 字符引用 16 进制 预定义实体引用 <  &#60; &#x3c; &lt; >  &#62; &#x3e; &gt; “ &#34; &#x22; &quot; ‘ &#39; &#x27; &apos; & &#38; &#x26; &amp; 4. 注释 在 XML 中注释的语法基本上和 HTML 中的一样。 <!-- 这是一个注释 --> 。注释不要出现在标记中。 5. 处理指令 处理指令允许文档中包含由应用程序来处理的指令。处理指令的语法和 xml 声明类似,以 < ?开始,以 ?> 结束。一个常见的样式表单的处理指令如下所示: <?xml–stylesheet href=”hello.css” type=”text/css”?> 1.5 关于DTD 符合语法的 XML 文档称为结构良好的 XML 文档。 通过 DTD 验证的 XML 文档称为有效的 XML 文档。 XML Schema(XML 模式 ) 是基于 XML 的 DTD 的替代品。 通过 DTD ,你的每一个 XML 文件都自身携带有关它自身格式的说明。 通过 DTD ,不同群体的人们可以对使用普通的 DTD 来交换数据的方法达成一致。   含有 DTD 的实例 XML 文件: #PCDATA 指明必须是字符数据。  1 <?xml version="1.0"?>  2 <!DOCTYPE note [  3   <!ELEMENT note (to,from,heading,body)>  4   <!ELEMENT to      (#PCDATA)>  5   <!ELEMENT from    (#PCDATA)>  6   <!ELEMENT heading (#PCDATA)>  7   <!ELEMENT body    (#PCDATA)>  8 ]>  9 <note> 10   <to>Tove</to> 11   <from>Jani</from> 12   <heading>Reminder</heading> 13   <body>Don't forget me this weekend</body> 14 </note> 15  如果 DTD 对于你的 XML 文件是外部而言,那么它会在含有以下句法构造的 DOCTYPE 声明中预先包装进去。如: 1 <?xml version="1.0"?> 2 <!DOCTYPE note SYSTEM "note.dtd"> 3 <note> 4 <to>Tove</to> 5 <from>Jani</from> 6 <heading>Reminder</heading> 7 <body>Don't forget me this weekend!</body> 8 </note> 下面是一份包含了 DTD 的 "note.dtd" 文件副本: 1 <! ELEMENT note (to,from,heading,body) > 2 <! ELEMENT to (#PCDATA) > 3 <! ELEMENT from (#PCDATA) > 4 <! ELEMENT heading (#PCDATA) > 5 <! ELEMENT body (#PCDATA) >   1.6 XSL XSL (全称是:可扩展的样式单语言,the eXtensible Styles
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服