DBMS_XMLDOM
功能描述
dbms_xmldom包用于访问xmltype对象,并实现文档对象模型(DOM),是用于xml和HTML文档的应用程序编程接口(API)。
DOM把xml文档当成树结构来查看,通过DOM树能访问、修改、删除文档中所有元素以及创建新的元素并插入树中,这些元素、文本以及它们的属性都被认为是节点,这些节点之间是一个继承层次结构。继承层次结构如下图所示:
节点类型
DOMNode类型:即Node节点。代表xml文档树中一个单独的节点,可以是其他任何一种节点。
DOMAttr类型:即Attr节点。表示Element节点中的属性。
DOMElement类型:即Element节点,代表xml文档中的一个元素。元素可以包含属性,其他元素或文本。
DOMText类型:即Text节点。表示元素或属性的文本内容。
DOMCDATASection类型:即CDATASection节点。表示xml文档中的CDATA区段,CDATA区段时一段不会被解析器解析的文本。
DOMComment类型:即Comment节点。表示xml文档中注释节点的内容。
DOMEntity类型:即Entity节点。在xml文档中频繁使用某一条数据时,可以预定义一个这条数据的“别名”,即一个Entity,然后在文档中需要的地方进行调用。
DOMDocument类型:即Documnet节点。代表整个xml文档,是文档树的根,并提供了对文档数据访问的顶层入口。
DOMDocumentFragment类型:即DocumentFragment节点。文档中的一部分,表示一个或多个邻接的Document节点和它们的所有子孙节点。DocumentFragment节点不属于文档树。
DOMNotation类型:即Notation元素。Notation元素描述xml文档中非xml数据的格式。
DOMDocumentType类型:即DocumentType节点。每个xml文档均有一个DOCTYPE属性,此属性的值可谓空,也可以是一个DocumentType对象。DocumentType对象为xml定义的实体提供接口。
DOMProcessingInstruction类型:即ProcessingInstruction节点。表示xml文档中的一个处理指令。
DOMText类型:即DOMText节点。XML文档中的文本。
该内置包包含以下函数:
函数 | 描述 |
---|---|
dbms_xmldom.makeNode | 将其他节点类型转换成DOMNode类型,以便调用DOMNode的方法。 |
dbms_xmldom.isNull | 检查输入的对象是否为空,为空则返回true,否则返回false。 |
dbms_xmldom.freeNode | 释放与DOMNode关联的所有资源。 |
dbms_xmldom.freeNodeList | 释放与节点列表关联的所有资源。 |
dbms_xmldom.freeDocument | 释放一个DOMDocument对象的所有资源。 |
dbms_xmldom.getFirstChild | 返回此节点的第一个子节点,如果没有则返回NULL。 |
dbms_xmldom.getLocalName | 返回节点名称的本地部分。 |
dbms_xmldom.getNodeType | 返回节点类型。 |
dbms_xmldom.writeToClob | 使用数据库字符集将xml节点或xml文档写入指定的clob。 |
dbms_xmldom.writeToBuffer | 使用数据库字符集将xml节点或xml文档写入指定的缓冲区。 |
dbms_xmldom.getChildNodes | 返回当前节点的所有子节点。 |
dbms_xmldom.getLength | 返回当前对象的长度。 |
dbms_xmldom.item | 返回节点列表或DOMNamedNodeMap无序列表中index参数对应的项。如果index大于或等于列表中的节点数,则返回空。 |
dbms_xmldom.makeElement | 将DOMNode节点转换成DOMElement节点类型。该函数主要用于将DOMElement节点转换成的DOMNode转换回DOMElement,因此除了节点类型为ELEMENT_NODE的节点,其他节点类型不能调用该函数。 |
dbms_xmldom.makeCharacterData | 该函数用于将指定的DOMNODE转换成DOMCHARACTERDATA,并返回DOMCHARACTERDATA。 |
dbms_xmldom.getElementsByTagName | 返回包含指定名称的所有DOMElement的DOMNodeList。 |
dbms_xmldom.cloneNode | 返回此节点的副本,并用作节点的通用复制构造函数。拷贝的节点没有父节点,父节点为空。 |
dbms_xmldom.getNodeName | 返回节点的节点名称。 |
dbms_xmldom.createDocument | 通过制定的命名空间URI、根元素名和doctype创建一个xml文档。 |
dbms_xmldom.createElement | 用于创建一个DOMElement节点。 |
dbms_xmldom.createDocumentFragment | 用于创建一个DOMDocumentFragment节点。 |
dbms_xmldom.createTextNode | 用于创建一个DOMText节点。 |
dbms_xmldom.createComment | 用于创建一个DOMComment节点。 |
dbms_xmldom.createCDATASection | 用于创建一个DOMCDATASection节点。 |
dbms_xmldom.createProcessingInstruction | 用于创建一个DOMProcessingInstruction节点。 |
dbms_xmldom.createAttribute | 用于创建一个DOMAttr节点。 |
dbms_xmldom.appendChild | 用于将节点newchild添加到该节点的子节点列表的末尾,并返回新添加的节点。如果newchild已经在树中,则先删除。 |
dbms_xmldom.getDocumentElement | 用于返回xml文档的根元素节点。 |
dbms_xmldom.setAttribute | 用于通过名称设置DOMElement属性的值。 |
dbms_xmldom.setAttributeNode | 用于向DOMElement添加一个新的属性节点。 |
dbms_xmldom.getAttributes | 用于检索包含此节点属性的NamedNodeMap,只有DOMElement包含该属性,其他节点则返回空。 |
dbms_xmldom.getNodeValue | 根据节点的类型获取该节点的值。 |
dbms_xmldom.getNodeValueAsClob | 根据节点的类型获取该节点的值并写入clob中。 |
dbms_xmldom.getChildrenByTagName | 用于根据指定的名称返回DOMELement的子节点。 |
dbms_xmldom.getOwnerDocument | 用于检索与此节点关联的Document对象。 |
dbms_xmldom.newDOMDocument | 返回一个新DOMDocument实例。 |
dbms_xmldom.hasChildNodes | 数返回该节点是否有子节点。 |
dbms_xmldom.insertBefore | 用于将节点newchild插入到现有的子节点refchild之前。 |
dbms_xmldom.setVersion | 用于设置xml文档的版本号。 |
注意事项
该功能仅在数据库兼容模式为Oracle时支持(即数据库实例初始化时指定DBCOMPATIBILITY='A')。
dbms_xmldom支持同义词xmldom,即调用内置函数时,内置包名称dbms_xmldom可用xmldom替换。
系统已经安装python3。python3安装方法请参见python3环境配置。
系统已经创建plpython3u插件,需设置环境变量PYTHONHOME,包括以下内容(重启数据库生效):
PYTHONHOME:python3安装路径。
LD_LIBRARY_PATH:python3安装路径下的lib目录。
PATH:python3安装路径bin目录。
使用如下命令创建插件:
CREATE EXTENSION plpython3u;
dbms_xmldom.makeNode
语法格式
makeNode(t dbms_xmldom.DOMText) RETURN DOMNODE;
makeNode(com dbms_xmldom.DOMComment) RETURN DOMNODE;
makeNode(cds dbms_xmldom.DOMCDATASection) RETURN DOMNODE;
makeNode(dt dbms_xmldom.DOMDocumentType) RETURN DOMNODE;
makeNode(n dbms_xmldom.DOMNotation) RETURN DOMNODE;
makeNode(ent dbms_xmldom.DOMEntity) RETURN DOMNODE;
makeNode(pi dbms_xmldom.DOMProcessingInstruction) RETURN DOMNODE;
makeNode(df dbms_xmldom.DOMDocumentFragment) RETURN DOMNODE;
makeNode(doc dbms_xmldom.DOMDocument) RETURN DOMNODE;
makeNode(elem dbms_xmldom.DOMElement) RETURN DOMNODE;
参数说明
- 输入
- t:待转换的DOMText对象。
- com:待转换的DOMComment对象。
- cds:待转换的DOMCDATASection对象。
- dt:待转换的DOMDocumentType对象。
- n:待转换的DOMNotation对象。
- ent:待转换的DOMEntity对象。
- pi:待转换的DOMProcessingInstruction对象。
- df:待转换的DOMDocumentFragment对象。
- doc:待转换的DOMDocument对象。
- elem:待转换的DOMElement。
输出
DOMNODE:转换后的DOMNode对象。
dbms_xmldom.isNull
语法格式
isNull(n dbms_xmldom.DOMNode) RETURN BOOLEAN;
isNull(di dbms_xmldom.DOMImplementation) RETURN BOOLEAN;
isNull(nl dbms_xmldom.DOMNodeList) RETURN BOOLEAN;
isNull(nnm dbms_xmldom.DOMNamedNodeMap) RETURN BOOLEAN;
isNull(cd dbms_xmldom.DOMCharacterData) RETURN BOOLEAN;
isNull(a dbms_xmldom.DOMAttr) RETURN BOOLEAN;
isNull(elem dbms_xmldom.DOMElement) RETURN BOOLEAN;
isNull(t dbms_xmldom.DOMText) RETURN BOOLEAN;
isNull(com dbms_xmldom.DOMComment) RETURN BOOLEAN;
isNull(cds dbms_xmldom.DOMCDATASection) RETURN BOOLEAN;
isNull(dt dbms_xmldom.DOMDocumentType) RETURN BOOLEAN;
isNull(n dbms_xmldom.DOMNotation) RETURN BOOLEAN;
isNull(ent dbms_xmldom.DOMEntity) RETURN BOOLEAN;
isNull(pi dbms_xmldom.DOMProcessingInstruction) RETURN BOOLEAN;
isNull(df dbms_xmldom.DOMDocumentFragment) RETURN BOOLEAN;
isNull(doc dbms_xmldom.DOMDocument) RETURN BOOLEAN;
参数说明
输入
指定的指定的对象类型。
输出
BOOLEAN:判断输入的对象是否为空,为空则返回true,否则返回false。
dbms_xmldom.freeNode
语法格式
freeNode(n dbms_xmldom.DOMnode);
参数说明
输入
n:待释放的DOMNode节点。
输出
无
dbms_xmldom.freeNodeList
语法格式
freeNodeList(nl dbms_xmldom.DOMNodeList);
参数说明
输入
n1:待释放的DOMNode节点。
输出
无
dbms_xmldom.freeDocument
语法格式
freeDocument(doc dbms_xmldom.DOMDocument);
参数说明
输入
doc:待释放的DOMDocument节点。
输出
无
dbms_xmldom.getFirstChild
语法格式
getFirstChild(n dbms_xmldom.DOMNode) RETURN DOMNODE;
参数说明
输入
n:DOMNode对象。
输出
DOMNODE:DOMNode节点。
dbms_xmldom.getLocalName
语法格式
getLocalName(a dbms_xmldom.DOMAttr) RETURN VARCHAR2;
getLocalName(elem dbms_xmldom.DOMElement) RETURN VARCHAR2;
getLocalName(n dbms_xmldom.DOMnode, data OUT VARCHAR2);
参数说明
- 输入
- a:DOMAtrr对象。
- elem:DOMElement对象。
- n:DOMNode对象。
输出
varchar2:节点名称的本地部分。
dbms_xmldom.getNodeType
语法格式
getNodeType(n dbms_xmldom.DOMNode) RETURN INTEGER;
参数说明
输入
n:DOMNode对象
输出
INTEGER:节点类型
dbms_xmldom.writeToClob
语法格式
writeToClob(n dbms_xmldom.DOMNode, cl IN OUT CLOB);
writeToClob(n dbms_xmldom.DOMNode, cl IN OUT CLOB, pflag IN NUMBER, indent IN NUMBER);
writeToClob(doc dbms_xmldom.DOMDocument, cl IN OUT CLOB);
writeToClob(doc dbms_xmldom.DOMDocument, cl IN OUT CLOB, pflag IN NUMBER, indent IN NUMBER);
参数说明
输入
- n:DOMNode对象。
- cl:指定的clob。
- pflag:换行标识。该参数Oracle官方文档无明确说明,经过测试得知取值范围为0-72的整数,所有低三位为4或5的值则表示不换行,其他值则换行。
- indent:缩进长度。该参数Oracle官方文档无明确说明,经过测试得知取值范围为0-12的整数,数值大小表示缩进的空格个数。缩进长度只在pflag为换行时生效。
- doc:xml文档。
输出
clob:clob对象
dbms_xmldom.writeToBuffer
语法格式
writeToBuffer(n dbms_xmldom.DOMNode, buffer IN OUT VARCHAR2);
writeToBuffer(doc dbms_xmldom.DOMDocument, buffer IN OUT VARCHAR2);
writeToBuffer(df dbms_xmldom.DOMDocumentFragment, buffer IN OUT VARCHAR2);
参数说明
输入
- n:DOMNode节点对象。
- doc:xml文档对象。
- df:DOMDocumentFragment对象。
- buffer:指定的缓冲区。
输出
varchar2:指定的缓冲区。
dbms_xmldom.getChildNodes
语法格式
getChildNodes(n dbms_xmldom.DOMNode) RETURN DOMNodeList;
参数说明
输入
n:DOMNode节点对象。
输出
dbms_xmldom.DOMNodeList:当前节点的所有子节点。
dbms_xmldom.getLength
语法格式
getLength(nl dbms_xmldom.DOMNodeList) RETURN pls_integer;
getLength(nnm dbms_xmldom.DOMNamedNodeMap) RETURN pls_integer;
getLength(cd dbms_xmldom.DOMCharacterData) RETURN pls_integer;
参数说明
输入
- nl:DOMNodeList对象。
- nnm:DOMNamedNodeMap对象。
- cd:DOMCharacterData对象。
输出
pls_integer:指定对象的长度。
dbms_xmldom.item
语法格式
item(nl dbms_xmldom.DOMNodeList, idx IN PLS_INTEGER) RETURN DOMNODE;
item(nnm dbms_xmldom.DOMNamedNodeMap, idx IN PLS_INTEGER) RETURN DOMNODE;
参数说明
输入
- nl:节点列表。
- nnm:DOMNamedNodeMap无序列表。
- idx:在列表中要检索的索引值。
输出
DOMNode:索引值对应的节点。
dbms_xmldom.makeElement
语法格式
makeElement(n dbms_xmldom.DOMNode) RETURN DOMELEMENT;
参数说明
输入
n:DOMNode对象。
输出
DOMElement:DOMElement对象。
dbms_xmldom.makeCharacterData
语法格式
DBMS_XMLDOM.MAKECHARACTERDATA(n IN DOMNode) RETURN DOMCharacterData;
参数说明
输入
n IN DOMNode: 指定DOMNode。
输出
DOMCharacterData: 转换为DOMCharacterData类型输出。
dbms_xmldom.getElementsByTagName
语法格式
getElementsByTagName(elem dbms_xmldom.DOMElement, name IN VARCHAR2) RETURN DOMNODELIST;
getElementsByTagName(elem dbms_xmldom.DOMElement, name IN VARCHAR2, ns varchar2) RETURN DOMNODELIST;
getElementsByTagName(doc dbms_xmldom.DOMDocument, tagname IN VARCHAR2) RETURN DOMNODELIST;
参数说明
输入
- elem:DOMElement对象。
- name:指定名称。
- ns:指定的命名空间。
- doc:DOMDocument对象。
输出
DOMNodeList:包含name的节点列表。
dbms_xmldom.cloneNode
语法格式
cloneNode(n dbms_xmldom.DOMNode, deep boolean) RETURN DOMNODE;
参数说明
输入
- n:DOMNode对象。
- deep:是否拷贝子节点。
输出
DOMNode:拷贝后的DOMNode节点。
dbms_xmldom.getNodeName
语法格式
getNodeName(n dbms_xmldom.DOMNode) RETURN VARCHAR2;
参数说明
输入
n:DOMNode对象。
输出
VARCHAR2:节点名称。
dbms_xmldom.createDocument
语法格式
createDocument(
namespaceuri IN VARCHAR2,
qualifiedname IN VARCHAR2,
doctype IN dbms_xmldom.DOMType:= NULL)
RETURN DOMDOCUMENT;
语法格式
输入
- namespaceuri :命名空间URI。
- qualifiedname :根元素名。
- doctype:documentType对象。
输出
dbms_xmldom.DOMDocument:xml文档。
dbms_xmldom.createElement
语法格式
createElement(doc dbms_xmldom.DOMDocument, tagname IN VARCHAR2) RETURN DOMELEMENT;
createElement(doc dbms_xmldom.DOMDocument, tagname IN VARCHAR2, ns IN VARCHAR2) RETURN DOMELEMENT;
参数说明
输入
- doc:xml文档。
- tagname:DOMElement节点的名称。
- ns:命名空间URI。
输出
DOMElement:DOMElement对象。
dbms_xmldom.createDocumentFragment
语法格式
createDocumentFragment(doc dbms_xmldom.DOMDocument) RETURN DOMDOCUMENTFRAGMENT;
参数说明
输入
doc:xml文档。
输出
dbms_xmldom.DOMDocumentFragment:DOMDocumentFragment对象。
dbms_xmldom.createTextNode
语法格式
createTextNode(doc dbms_xmldom.DOMDocument, data IN VARCHAR2) RETURN DOMTEXT;
参数说明
输入
- doc:xml文档。
- data:DOMText节点的内容。
输出
dbms_xmldom.DOMText:DOMText对象。
dbms_xmldom.createComment
语法格式
createComment(doc dbms_xmldom.DOMDocument, data IN VARCHAR2) RETURN DOMCOMMENT;
参数说明
输入
- doc:xml文档。
- data:DOMComment节点的内容。
输出
dbms_xmldom.DOMComment:DOMComment对象。
dbms_xmldom.createCDATASection
语法格式
createCDATASection(doc dbms_xmldom.DOMDocument, data IN VARCHAR2) RETURN DOMCDATASECTION;
参数说明
输入
- doc:xml文档。
- data:DOMCDATASection节点的内容。
输出
dbms_xmldom.createCDATASection:createCDATASection对象。
dbms_xmldom.createProcessingInstruction
语法格式
createProcessingInstruction(doc dbms_xmldom.DOMDocument, target IN VARCHAR2, data IN VARCHAR2) RETURN DOMPROCESSINGINSTRUCTION;
参数说明
输入
- doc:xml文档。
- target:处理指令的目标。
- data:处理指令的内容文本。
输出
dbms_xmldom.DOMProcessingInstruction:DOMProcessingInstruction对象。
dbms_xmldom.createAttribute
语法格式
createAttribute(doc dbms_xmldom.DOMDocument, name IN VARCHAR2) RETURN DOMATTR;
createAttribute(doc dbms_xmldom.DOMDocument, name IN VARCHAR2, ns IN VARCHAR2) RETURN DOMATTR;
参数说明
输入
- doc:xml文档。
- name:属性的名称。
- ns:命名空间URI。
输出
dbms_xmldom.DOMAttr:DOMAttr对象。
dbms_xmldom.appendChild
语法格式
appendChild(n dbms_xmldom.DOMNode, newchild IN dbms_xmldom.DOMNode) RETURN DOMNODE;
参数说明
输入
- n:DOMNode节点。
- newchild :待添加的子节点。
输出
dbms_xmldom.DOMNode:新添加的子节点。
dbms_xmldom.getDocumentElement
语法格式
getDocumentElement(doc dbms_xmldom.DOMDocument) RETURN DOMELEMENT;
参数说明
输入
doc:xml文档。
输出
dbms_xmldom.DOMElement:根元素节点。
dbms_xmldom.setAttribute
语法格式
setAttribute(elem dbms_xmldom.DOMElement, name IN VARCHAR2, newvalue IN VARCHAR2);
setAttribute(elem dbms_xmldom.DOMElement, name IN VARCHAR2, newvalue IN VARCHAR2, ns IN VARCHAR2);
参数说明
输入
- elem:DOMElement节点。
- name:属性名。
- newvalue:待设置的值。
- ns:命名空间URI。
输出
无
dbms_xmldom.setAttributeNode
语法格式
setAttributeNode(elem dbms_xmldom.DOMElement, newattr IN dbms_xmldom.DOMAttr) ;
setAttributeNode(elem dbms_xmldom.DOMElement, newattr IN dbms_xmldom.DOMAttr, ns IN VARCHAR2) ;
参数说明
输入
- elem:DOMElement节点。
- newattr:新的属性节点。
- ns:命名空间URI。
输出
无
dbms_xmldom.getAttributes
语法格式
getAttributes(n dbms_xmldom.DOMNode) RETURN DOMNAMEDNODEMAP;
参数说明
输入
n:DOMNode节点。
输出
dbms_xmldom.DOMNamedNodeMap:DOMNamedNodeMap对象。
dbms_xmldom.getNodeValueAsClob
语法格式
getNodeValueAsClob(n dbms_xmldom.domnode);
参数说明
输入
n:DOMNode节点。
输出
clob:节点的值。
dbms_xmldom.getNodeValue
语法格式
getNodeValue(n dbms_xmldom.DOMNode) RETURN VARCHAR2;
参数说明
输入
n:DOMNode节点。
输出
varchar2:节点的值。
dbms_xmldom.getChildrenByTagName
语法格式
getChildrenByTagName(elem dbms_xmldom.DOMElement, name varchar2) RETURN DOMNODELIST;
getChildrenByTagName(elem dbms_xmldom.DOMElement, name varchar2, ns varchar2) RETURN DOMNODELIST;
参数说明
语法格式
getOwnerDocument(n dbms_xmldom.DOMNode) RETURN DOMDOCUMENT;
参数说明
输入
n:DOMNode节点。
输出
dbms_xmldom.DOMComment:Document对象。
dbms_xmldom.newDOMDocument
语法格式
newDOMDocument RETURN DOMDOCUMENT;
newDOMDocument(xmldoc IN xmltype) RETURN DOMDOCUMENT;
newDOMDocument(cl IN clob) RETURN DOMDOCUMENT;
参数说明
输入
- xmldoc :DOMDocument的xmltype的源数据。
- cl:DOMDocument的clob的源数据。
输出
dbms_xmldom.DOMComment:Document对象。
dbms_xmldom.hasChildNodes
语法格式
hasChildNodes(n dbms_xmldom.DOMNode) RETURN BOOLEAN;
参数说明
输入
n:DOMNode节点。
输出
boolean:是否有子节点,有子节点返回true,否则返回false。
dbms_xmldom.insertBefore
语法格式
insertBefore(
n dbms_xmldom.DOMNode,
newchild IN dbms_xmldom.DOMNode,
refchild IN dbms_xmldom.DOMNode)
RETURN DOMNode;
参数说明
输入
- n:DOMNode节点。
- newchild :待插入的新节点。
- refchild :现有的子节点。
输出
dbms_xmldom.DOMNode:插入的子节点。
dbms_xmldom.setVersion
语法格式
setVersion(doc dbms_xmldom.DOMDocument, version VARCHAR2);
参数说明
输入
- doc:xml文档。
- version:待设置的版本号。
输出
无