Python DOM APIS

DOM(文档对象模型)是用于处理XML文档的API,提供了一种树状结构来访问和修改XML。Python的xml.dom模块实现了DOM,包括节点、元素、属性等对象,以及解析、创建和操作XML文档的方法。DOM适用于需要随机访问文档的应用,与SAX解析器相比,DOM允许更灵活的文档遍历和修改。
摘要由CSDN通过智能技术生成

目录

xml.dom — 文档对象模型 API

模块内容

DOM 中的对象

目录对象

节点对象

节点列表对象

文档类型对象

文档对象

元素对象

属性对象

命名节点映射对象

注释对象

文本和 CDATA服务对象

处理指令对象

异常

一致性

类型映射

访问器方法


xml.dom — 文档对象模型 API

源代码: lib/xml/dom/__init__.py


文档对象模型(“DOM”)是来自 World Wide 的跨语言 API 用于访问和修改 XML 文档的 Web 联盟 (W3C)。一个 DOM 实现将 XML 文档呈现为树结构,或允许客户端 从头开始构建此类结构的代码。然后,它允许访问 通过一组提供已知接口的对象进行结构。

DOM 对于随机存取应用程序非常有用。SAX 只允许您 一次查看文档的一位。如果您正在查看一个 SAX 元素,您无权访问另一个元素。如果您正在查看文本节点,则 无法访问包含元素。编写 SAX 应用程序时,您 需要跟踪程序在文档中某处的位置 自己的代码。SAX 不会为您执行此操作。此外,如果您需要在 XML文档,你只是不走运。

在事件驱动模型中,某些应用程序根本不可能,没有访问权限 到一棵树上。当然,您可以在 SAX 事件中自己构建某种树, 但是 DOM 允许您避免编写该代码。DOM 是一个标准树 XML 数据的表示形式。

文档对象模型由 W3C 分阶段定义,或 他们的术语。API 的 Python 映射基本上基于 DOM 级别 2 建议。

DOM 应用程序通常首先将一些 XML 解析为 DOM。这是怎么回事 DOM 级别 1 根本不涵盖已完成,级别 2 仅提供 有限的改进:有一个对象类 提供对创建方法的访问,但无法访问 XML 阅读器/解析器/文档生成器,采用独立于实现的方式。那里 也没有明确定义的方式来在没有现有对象的情况下访问这些方法。在 Python 中,每个 DOM 实现都将提供一个 函数 getDOMImplementation().DOM 级别 3 添加加载/存储 规范,它定义了与阅读器的接口,但这还没有 在 Python 标准库中可用。DOMImplementationDocumentDocument

拥有 DOM 文档对象后,您可以访问 XML 的各个部分 通过其属性和方法进行记录。这些属性在 中定义 DOM 规范;参考手册的这一部分描述了 Python中规范的解释。

W3C 提供的规范定义了 Java 的 DOM API、ECMAScript、 和天哪。这里定义的 Python 映射在很大程度上基于 IDL 版本,但不需要严格遵守(尽管 实现可以自由地支持 IDL 的严格映射)。有关映射要求的详细讨论,请参阅一致性部分。

参见

文档对象模型 (DOM) 级别 2 规范

Python DOM API 所基于的 W3C 建议。

文档对象模型 (DOM) 级别 1 规范

xml.dom.minidom 支持的 DOM 的 W3C 建议。

Python 语言映射规范

这指定了从OMG IDL到Python的映射。

模块内容

xml.dom 包含以下函数:

xml.dom.注册DOMImplementation名称工厂))

使用名称名称注册工厂函数。工厂功能 应该返回一个实现接口的对象。工厂函数每次都可以返回相同的对象,或者一个新的 每个调用一个,根据特定实现(例如,如果 实现支持一些自定义)。DOMImplementation

xml.dom.getDOMImplementationname=None, features=())

返回合适的 DOM 实现。这个名字要么是众所周知的, DOM 实现的模块名称,或 .如果不是,则导入 相应的模块,如果 导入成功。如果未指定名称,并且设置了环境变量,则使用此变量查找实现。NoneNoneDOMImplementationPYTHON_DOM

如果未指定名称,则会检查可用的实现以查找一个 具有所需的功能集。如果找不到实现,请引发导入错误。功能列表必须是传递给可用对象上的方法的一系列对。(feature, version)hasFeature()DOMImplementation

还提供了一些方便的常量:

xml.dom.EMPTY_NAMESPACE

用于指示没有命名空间与 多姆。这通常作为节点找到,或用作 命名空间特定方法的命名空间 URI 参数。namespaceURI

xml.dom.XML_NAMESPACE

与保留前缀关联的命名空间 URI,由 XML 中的命名空间定义(第 4 节)。xml

xml.dom.XMLNS_NAMESPACE

命名空间声明的命名空间 URI,由文档对象定义 模型 (DOM) 级别 2 核心规范(第 1.1.8 节)。

xml.dom.XHTML_NAMESPACE

XHTML 1.0 定义的 XHTML 命名空间的 URI:可扩展 超文本标记语言(第 3.1.1 节)。

此外,xml.dom 包含一个基类和 DOM 异常类。此模块提供的类不 实现 DOM 规范定义的任何方法或属性; 具体的 DOM 实现必须提供这些。该类 作为此模块的一部分提供的确实提供了用于具体对象属性的常量;他们位于 在类内而不是在模块级别以符合 DOM 规格。NodeNodeNodenodeTypeNode

DOM 中的对象

DOM 的权威文档是 W3C 的 DOM 规范。

请注意,DOM 属性也可以作为节点进行操作,而不是简单的 字符串。但是,您必须这样做的情况很少见,因此此用法不是 但有据可查。

接口

部分

目的

DOMImplementation

目录对象

与底层的接口 实现。

Node

节点对象

大多数对象的基本接口 在文档中。

NodeList

节点列表对象

用于一系列 节点。

DocumentType

文档类型对象

有关 需要处理的声明 一个文档。

Document

文档对象

表示 整个文档。

Element

元素对象

文档中的元素节点 等级制度。

Attr

属性对象

上的属性值节点 元素节点。

Comment

注释对象

注释的表示形式 源文档。

Text

文本和 CDATA服务对象

包含文本的节点 文档中的内容。

ProcessingInstruction

处理指令对象

处理指令 表示法。

附加部分描述了为使用 DOM 而定义的异常 在 Python 中。

目录对象

该接口为应用程序提供了一种 确定他们正在使用的 DOM 中特定功能的可用性。 DOM 级别 2 还添加了使用 以及 创建新对象和对象的能力。DOMImplementationDocumentDocumentTypeDOMImplementation

多米实现。具有功能(功能版本)

如果实现了由字符串对功能和版本标识的功能,则返回。True

多米实现。createDocumentnamespaceUri, qualifiedName, doctype)

返回一个新对象(DOM 的根),其中子对象具有给定的命名空间 Uri 和限定名称文档类型必须是由 createDocumentType() 或 创建的对象。在Python DOM API中,前两个 参数也可以用于指示不创建子项。DocumentElementDocumentTypeNoneNoneElement

多米实现。createDocumentTypequalifiedName, publicId, systemId)

返回一个新对象,该对象封装给定的限定名称公共 ID 和系统ID 字符串,表示 XML 文档类型声明中包含的信息。DocumentType

节点对象

XML 文档的所有组件都是 的子类。Node

节点。节点类型

表示节点类型的整数。类型的符号常量为 on 对象:、、、、 这是一个只读属性。NodeELEMENT_NODEATTRIBUTE_NODETEXT_NODECDATA_SECTION_NODEENTITY_NODEPROCESSING_INSTRUCTION_NODECOMMENT_NODEDOCUMENT_NODEDOCUMENT_TYPE_NODENOTATION_NODE

节点。父节点

当前节点的父节点或文档节点的父节点。值为 始终是对象或 .对于节点,这 将是父元素,根元素除外,在这种情况下,它将 成为对象。对于节点,这始终是 。这是一个只读属性。NoneNodeNoneElementDocumentAttrNone

节点。属性

属性对象的 A。只有元素才有实际值 为此;其他人提供此属性。这是只读的 属性。NamedNodeMapNone

节点。上一页兄弟姐妹

紧接在此节点前面的节点,具有相同的父节点。为 实例化具有 self 元素的开始标记之前的结束标记的元素。当然,XML 文档不仅仅由 元素,因此以前的同级可以是文本、注释或其他内容。 如果此节点是父节点的第一个子节点,则此属性将为 。这是一个只读属性。None

节点。下一个兄弟姐妹

紧跟在此节点之后的节点,具有相同的父节点。另请参阅以前的同级。如果这是父级的最后一个子项,则此 属性将为 。这是一个只读属性。None

节点。子节点

此节点中包含的节点列表。这是一个只读属性。

节点。第一个孩子

节点的第一个子节点(如果有)或 。这是只读的 属性。None

节点。最后一个孩子

节点的最后一个子节点(如果有)或 。这是只读的 属性。None

节点。本地名称

冒号后面的部分(如果有),否则 整个。该值是一个字符串。tagNametagName

节点。前缀

冒号前面的部分(如果有),否则 空字符串。该值为字符串或 。tagNameNone

节点。命名空间 URI

与元素名称关联的命名空间。这将是一个字符串或 .这是一个只读属性。None

节点。节点名称

对于每个节点类型,这都有不同的含义;请参阅 DOM 规范 详。您始终可以从另一个人那里获得在这里获得的信息 属性,例如元素的属性或属性的属性。对于所有节点类型,此属性的值将为 字符串或 .这是一个只读属性。tagNamenameNone

节点。节点值

对于每个节点类型,这都有不同的含义;请参阅 DOM 规范 详。这种情况与 nodeName 类似。值为 字符串或 .None

节点。有属性()

如果节点具有任何属性,则返回。True

节点。有子节点()

如果节点有任何子节点,则返回。True

节点。isSameNodeother)

如果 other 引用与此节点相同的节点,则返回。这尤其 对于使用任何类型的代理架构的 DOM 实现很有用(因为 多个对象可以引用同一节点)。True

注意

 

这是基于建议的 DOM 级别 3 API,该 API 仍处于“工作”中 草稿“阶段,但这个特定的界面似乎没有争议。变化 从 W3C 不一定会影响 Python DOM 接口中的此方法 (尽管也支持任何新的 W3C API)。

节点。附录子项(新子项))

在列表末尾向此节点添加新的子节点 孩子,返回新的孩子。如果节点已在 树,它首先被移除。

节点。insertBeforenewChild, refChild)

在现有子节点之前插入新的子节点。必须证明 refChild 是此节点的子节点;否则,将引发 ValueError返回新子级。如果 refChild 是 ,它会在 儿童名单的末尾。None

节点。删除子项(旧子项))

删除子节点。oldChild 必须是此节点的子节点;否则,将引发 ValueError老孩子在成功时返回。如果不再使用 oldChild,则应调用其方法。unlink()

节点。替换子项新子项,旧项))

将现有节点替换为新节点。一定是老孩子是这个节点的子节点;否则,将引发 ValueError

节点。正常化()

联接相邻的文本节点,以便将所有文本段存储为单个实例。这简化了 DOM 树中的文本处理 许多应用程序。Text

节点。克隆节点deep)

克隆此节点。设置深度意味着克隆所有子节点。这 返回克隆。

节点列表对象

A 表示节点序列。这些对象用于 DOM 核心推荐中的两种方式:一个对象提供 一个作为其子节点列表,以及 和 返回对象的方法 接口来表示查询结果。NodeListElementgetElementsByTagName()getElementsByTagNameNS()Node

DOM 级别 2 建议为这些定义了一种方法和一个属性 对象:

节点列表。项目I)

返回序列中的第 i 项(如果有),或 。这 索引 I 不允许小于零或大于或等于 序列的长度。None

节点列表。长度

序列中的节点数。

此外,Python DOM 接口需要一些额外的支持 以允许将对象用作 Python 序列。所有实现都必须包括对 __len__() 和 __getitem__() 的支持;这允许对 in for 语句进行迭代,并正确支持 len() 内置 功能。NodeListNodeListNodeList

如果 DOM 实现支持修改文档,则该实现还必须支持 __setitem__() 和 __delitem__() 方法。NodeList

文档类型对象

有关文档声明的符号和实体的信息(包括 外部子集(如果解析器使用它并且可以提供信息)是 可从对象获得。的 论坛 文档可从对象的属性中获得;如果没有文档声明, 文档的属性将设置为 而不是 此接口的实例。DocumentTypeDocumentTypeDocumentdoctypeDOCTYPEdoctypeNone

DocumentType是 的专用化,并添加了 以下属性:Node

文档类型。公共标识

文档类型定义的外部子集的公共标识符。 这将是一个字符串或 .None

文档类型。系统标识

文档类型定义的外部子集的系统标识符。 这将是字符串形式的 URI,或 .None

文档类型。内部子集

一个字符串,提供文档中的完整内部子集。这不 包括将子集括起来的括号。如果文档没有内部文档 子集,这应该是 .None

文档类型。名字

声明中给定的根元素的名称,如果 目前。DOCTYPE

文档类型。实体

这是给出外部实体的定义。 对于多次定义的实体名称,仅提供第一个定义 (根据 XML 建议的要求,将忽略其他内容)。这可能是如果信息不是由解析器提供的,或者如果没有实体 定义。NamedNodeMapNone

文档类型。符号

这是给出符号的定义。为 多次定义的符号名称,仅提供第一个定义 (根据 XML 建议的要求,将忽略其他内容)。这可能是如果解析器未提供信息,或者没有符号 被定义。NamedNodeMapNone

文档对象

A 表示整个 XML 文档,包括其组成部分 元素、属性、处理指令、注释等。记住它 从 继承属性。DocumentNode

公文。文档元素

文档的唯一根元素。

公文。createElementtagName)

创建并返回新的元素节点。该元素未插入到 文档创建时。您需要使用其中一个 其他方法,如 或 。insertBefore()appendChild()

公文。createElementNSnamespaceURI, tagName)

创建并返回带有命名空间的新元素。标签名称可能具有 前缀。创建元素时,不会将其插入到文档中。你 需要使用其他方法之一(例如 或 )显式插入它。insertBefore()appendChild()

公文。创建文本节点数据)

创建并返回一个文本节点,其中包含作为参数传递的数据。如 使用其他创建方法,此方法不会将节点插入到 树。

公文。创建注释数据)

创建并返回一个注释节点,其中包含作为参数传递的数据。如 使用其他创建方法,此方法不会将节点插入到 树。

公文。createProcessingInstruction (target, data)

创建并返回一个处理指令节点,其中包含作为参数传递的目标和数据。与其他创建方法一样,此方法确实如此 不要将节点插入树中。

公文。创建属性名称)

创建并返回属性节点。此方法不关联 具有任何特定元素的属性节点。您必须在适当的对象上使用才能使用 新创建的属性实例。setAttributeNode()Element

公文。createAttributeNSnamespaceURI, qualifiedName)

创建并返回具有命名空间的属性节点。标签名称可能具有 前缀。此方法不会将属性节点与任何特定 元素。必须在相应的对象上使用才能使用新创建的属性实例。setAttributeNode()Element

公文。getElementsByTagNametagName)

搜索所有带有 特定元素类型名称。

公文。getElementsByTagNameNS(namespaceURI, localName)

搜索所有带有 特定的命名空间 URI 和本地名称。本地名称是 前缀后面的命名空间。

元素对象

Element是 的子类,因此继承所有属性 的那个类。Node

元素。标签名称

元素类型名称。在使用命名空间的文档中,它可能包含冒号。 该值是一个字符串。

元素。getElementsByTagNametagName)

与类中的等效方法相同。Document

元素。getElementsByTagNameNS(namespaceURI, localName)

与类中的等效方法相同。Document

元素。hasAttributename)

如果元素具有按名称命名的属性,则返回。True

元素。hasAttributeNSnamespaceURI, localName)

如果元素具有由命名空间 URI 和 localName 命名的属性,则返回。True

元素。getAttributename)

以字符串形式返回按名称命名的属性的值。如果没有这样的 属性存在,则返回空字符串,就好像该属性没有值一样。

元素。getAttributeNodeattrname)

返回由 attrname 命名的属性的节点。Attr

元素。getAttributeNSnamespaceURI, localName)

返回由命名空间 URI 和本地名称命名的属性的值作为 字符串。如果不存在此类属性,则返回一个空字符串,就好像 属性没有值。

元素。getAttributeNodeNS(namespaceURI, localName)

返回一个属性值作为节点,给定命名空间 URI 和本地名称

元素。删除属性名称)

按名称删除属性。如果没有匹配的属性,则会引发 NotFoundErr

元素。removeAttributeNodeoldAttr)

从属性列表中删除并返回 oldAttr(如果存在)。如果旧 Attr 是 不存在,NotFoundErr 被提出。

元素。removeAttributeNSnamespaceURI, localName)

按名称删除属性。请注意,它使用本地名称,而不是 qname。不 如果没有匹配的属性,则会引发异常。

元素。setAttributename, value)

从字符串设置属性值。

元素。setAttributeNodenewAttr)

向元素添加新的属性节点,在以下情况下替换现有属性 如果属性匹配,则为必需。如果发生更换,则 将返回旧属性节点。如果 newAttr 已在使用中,则会引发 InuseAttributeErrname

元素。setAttributeNodeNSnewAttr)

向元素添加新的属性节点,在以下情况下替换现有属性 如果 和 属性匹配,则为必需。 如果发生替换,将返回旧属性节点。如果 newAttr 已在使用中,则会引发 InuseAttributeErrnamespaceURIlocalName

元素。setAttributeNS(namespaceURI, qname, value)

从字符串中设置属性值,给定命名空间 URI 和 qname。 请注意,qname 是整个属性名称。这与上述不同。

属性对象

Attr继承自 ,因此继承其所有属性。Node

阿特尔。名字

属性名称。 在使用命名空间的文档中,它可能包含冒号。

阿特尔。本地名称

名称中冒号后面的部分(如果有),否则 全名。 这是一个只读属性。

阿特尔。前缀

名称中冒号前面的部分(如果有),否则 空字符串。

阿特尔。价值

属性的文本值。这是属性的同义词。nodeValue

命名节点映射对象

NamedNodeMap继承自 。Node

命名节点映射。长度

属性列表的长度。

命名节点映射。项目索引)

返回具有特定索引的属性。获取属性的顺序 in 是任意的,但在 DOM 的生命周期内是一致的。每个项目都是一个 属性节点。使用属性获取其值。value

还有一些实验方法可以为此类提供更多映射行为。 您可以使用它们,也可以使用标准化家族 对象上的方法。getAttribute*()Element

注释对象

Comment表示 XML 文档中的注释。它是 的子类,但不能有子节点。Node

评论。数据

字符串形式的注释内容。该属性包含所有字符 在前导和尾随之间,但不 包括它们。<!---->

文本和 CDATA服务对象

该接口表示 XML 文档中的文本。如果解析器 和 DOM 实现支持 DOM 的 XML 扩展,部分文本 包含在CDATA中的标记部分存储在对象中。 这两个接口是相同的,但为属性提供不同的值。TextCDATASectionnodeType

这些接口扩展了接口。他们不能生孩子 节点。Node

发短信。数据

字符串形式的文本节点的内容。

说明

 

使用CDATA节点并不表示该节点 表示一个完整的CDATA标记部分,仅表示节点的内容 是 CDATA 部分的一部分。单个 CDATA 部分可能由更多表示 文档树中的一个节点。无法确定是否两个 相邻的 CDATA节点表示不同的 CDATA 标记部分。

处理指令对象

表示 XML 文档中的处理指令;这继承自接口,不能有子节点。Node

处理指令。目标

处理指令的内容,直到第一个空格字符。 这是一个只读属性。

处理指令。数据

第一个空格后面的处理指令的内容 字符。

异常

DOM 级别 2 建议定义了单个例外,即 DOMException, 以及许多常量,允许应用程序确定哪种类型的 发生错误。DOMException实例带有代码属性 为特定异常提供适当的值。

Python DOM 接口提供了常量,但也扩展了 异常,以便每个异常代码都存在特定异常 由 DOM 定义。实现必须提出适当的特定 异常,每个都带有 Code 属性的相应值。

异常 xml.dom.圆顶感受

用于所有特定 DOM 异常的基异常类。此异常类 不能直接实例化。

异常 xml.dom.DomstringSizeErr

当指定的文本范围不适合字符串时引发。这不是 已知在Python DOM实现中使用,但可能从DOM接收 不是用 Python 编写的实现。

异常 xml.dom.HierarchyRequestErr

尝试插入节点类型不是的节点时引发 允许。

异常 xml.dom.IndexSizeErr

当方法的索引或大小参数为负数或超过 允许的值。

异常 xml.dom.InuseAttributeErr

尝试插入已存在的节点时引发 出现在文档的其他位置。Attr

异常 xml.dom.InvalidAccessErr

如果基础对象不支持参数或操作,则引发。

异常 xml.dom.InvalidCharacterErr

当字符串参数包含以下字符时,将引发此异常 在 XML 1.0 建议使用的上下文中不允许。 例如,尝试创建一个节点,其中有空格 元素类型名称将导致引发此错误。Element

异常 xml.dom.InvalidModificationErr

在尝试修改节点类型时引发。

异常 xml.dom.无效状态错误

尝试使用未定义或未定义的对象时引发 更长的可用时间。

异常 xml.dom.命名空间错误

如果尝试以不允许的方式更改任何对象 关于 XML 中的命名空间建议,将引发此异常。

异常 xml.dom.NotFoundErr

引用的上下文中不存在节点时的异常。例如,如果传入的节点确实会引发此问题 地图中不存在。NamedNodeMap.removeNamedItem()

异常 xml.dom.NotSupportedErr

当实现不支持请求的对象类型或 操作。

异常 xml.dom.NoDataAllowedErr

如果为不支持数据的节点指定了数据,则会引发此值。

异常 xml.dom.NoModificationAllowedErr

在尝试修改不允许修改的对象时引发(例如 至于只读节点)。

异常 xml.dom.语法错误

指定无效或非法字符串时引发。

异常 xml.dom.错误文档错误

当节点插入到与其当前所属的文档不同的文档中时引发 to,并且实现不支持从一个文档迁移节点 到另一个。

DOM 建议中定义的异常代码映射到异常 根据下表进行上述说明:

不断

例外

DOMSTRING_SIZE_ERR

DomstringSizeErr

HIERARCHY_REQUEST_ERR

HierarchyRequestErr

INDEX_SIZE_ERR

IndexSizeErr

INUSE_ATTRIBUTE_ERR

InuseAttributeErr

INVALID_ACCESS_ERR

InvalidAccessErr

INVALID_CHARACTER_ERR

InvalidCharacterErr

INVALID_MODIFICATION_ERR

InvalidModificationErr

INVALID_STATE_ERR

无效状态错误

NAMESPACE_ERR

命名空间错误

NOT_FOUND_ERR

NotFoundErr

NOT_SUPPORTED_ERR

NotSupportedErr

NO_DATA_ALLOWED_ERR

NoDataAllowedErr

NO_MODIFICATION_ALLOWED_ERR

NoModificationAllowedErr

SYNTAX_ERR

语法错误

WRONG_DOCUMENT_ERR

错误文档错误

一致性

本节介绍一致性要求和 Python DOM API、W3C DOM 建议和 OMG IDL 映射 蟒。

类型映射

DOM 规范中使用的 IDL 类型映射到 Python 类型 根据下表。

IDL 类型

蟒蛇类型

boolean

boolint

int

int

long int

int

unsigned int

int

DOMString

strbytes

null

None

访问器方法

从OMG IDL到Python的映射以Java映射的方式定义IDL声明的访问器函数。 映射 IDL 声明attribute

readonly attribute string someValue;
         attribute string anotherValue;

生成三个访问器函数:() 的“get”方法,以及 ( 和 ) 的“get”和“set”方法。映射,在 特别是,不要求 IDL 属性可以正常访问 Python 属性:不需要工作,并且可以 引发属性错误someValue_get_someValue()anotherValue_get_anotherValue()_set_anotherValue()object.someValue

但是,Python DOM API 确实需要正常的属性访问工作。 这意味着 Python IDL 编译器生成的典型代理项不是 可能工作,如果 DOM 在客户端上可能需要包装器对象 对象通过 CORBA 访问。虽然这确实需要一些额外的 考虑 CORBA DOM 客户端,具有使用 DOM 经验的实现者 来自 Python 的 CORBA 不认为这是一个问题。属性是 声明可能不会限制所有 DOM 中的写入访问 实现。readonly

在 Python DOM API 中,不需要访问函数。如果提供,它们 应该采用 Python IDL 映射定义的形式,但这些方法是 被认为是不必要的,因为这些属性可以直接从 Python 访问。 切勿为属性提供“set”访问器。readonly

IDL 定义没有完全体现 W3C DOM API 的要求, 例如某些对象的概念,例如 的返回值是“活的”。Python DOM API 不需要 实施以强制执行此类要求。getElementsByTagName()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值