获取 Oracle DBMS_XMLDOM 包中的 XML 元素值
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17949943/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Get XML element value in Oracle DBMS_XMLDOM package
提问by sergdenisov
I have XML file that's stored in the clob column of the table in DB.
我有一个 XML 文件,它存储在 DB 表的 clob 列中。
<?xml version="1.0" encoding="UTF-8"?>
<document>
<row>
<organization>asdklfjas;kldfj;LASKJFAS</organization>
<phones>sjhdfhjaghjskfg</phones>
<persons>hkjg</persons>
</row>
</document>
I'm using DBMS_XMLDOM
package for parse it.
我正在使用DBMS_XMLDOM
包来解析它。
declare
v_clob clob;
v_doc dbms_xmldom.domdocument;
begin
...
v_doc := dbms_xmldom.newdomdocument(v_clob);
v_domelement := dbms_xmldom.getdocumentelement(v_doc);
...
end;
I need simply to get value from some element, for example <persons>
. How can I do it?
我只需要从某些元素中获取价值,例如<persons>
. 我该怎么做?
采纳答案by sergdenisov
I found what I was searching:
我找到了我正在搜索的内容:
...
v_doc := dbms_xmldom.newdomdocument(v_clob);
v_nodelist := dbms_xmldom.getelementsbytagname(v_doc, 'persons');
v_node := dbms_xmldom.getfirstchild(dbms_xmldom.item(v_nodelist, 0));
v_person := dbms_xmldom.getnodevalue(v_node);
...
回答by blerontin
There is also the option to use XslProcessor functions together with XPath:
还可以选择将 XslProcessor 函数与 XPath 一起使用:
DECLARE
v_Clob CLOB;
v_Doc XmlDom.DomDocument;
v_RootNode XmlDom.DomNode;
v_Value VARCHAR2(128);
BEGIN
...
v_Doc := XmlDom.NewDomDocument(v_Clob);
v_RootNode := XmlDom.MakeNode(XmlDom.GetDocumentElement(v_Doc));
v_Value := XmlDom.GetNodeValue(
XslProcessor.SelectSingleNode(v_RootNode, '/document/row[1]/persons/text()'));
...
END;
回答by S.Roshanth
To get XML Element value you can use either DBMS_XMLDOM or XslProcessor packages. Refer to my answer hereto construct and DBMS_XMLDOM.DOMDocument from CLOB column. Then use the below method to extract element value.
要获取 XML 元素值,您可以使用 DBMS_XMLDOM 或 XslProcessor 包。请参阅我在此处的回答以从 CLOB 列构造和 DBMS_XMLDOM.DOMDocument。然后使用以下方法提取元素值。
FUNCTION Get_Node_Value_From_Doc(
v_Doc IN DBMS_XMLDOM.DomDocument) RETURN VARCHAR2
IS
v_Clob CLOB;
v_RootNode DBMS_XMLDOM.DomNode;
v_Value VARCHAR2(2000);
BEGIN
v_RootNode := DBMS_XMLDOM.MakeNode(XmlDom.GetDocumentElement(v_Doc));
v_Value := DBMS_XMLDOM.GetNodeValue(XslProcessor.SelectSingleNode(v_RootNode,
'/soap:Envelope/soap:Body/GetLiveAnalysisIDSResponse[1]/AnalysisIDs[1]/guid[1]/text()'
,'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="https://www.testkid.net/"'));
RETURN v_Value;
END Get_Node_Value_From_Doc;
Providing correct namespace is important when dealing with SOAP XML messages.
在处理 SOAP XML 消息时,提供正确的命名空间很重要。