God*_*ode 6 xml sql oracle plsql
有人知道如何检索<ZIPCODE>
和<CITY>
使用PL/SQL 的值吗?我已经通过网络上的教程,但是,它可以检索元素名称,但不能检索它们的值.你们中的任何人都知道这似乎是什么问题吗?我已经咨询了谷歌(互联网保密),但没有运气:(
<Zipcodes>
<mappings Record="4">
<STATE_ABBREVIATION>CA</STATE_ABBREVIATION>
<ZIPCODE>94301</ZIPCODE>
<CITY>Palo Alto</CITY>
</mappings>
</Zipcodes>
Run Code Online (Sandbox Code Playgroud)
这是示例代码:
-- prints elements in a document
PROCEDURE printElements(doc DBMS_XMLDOM.DOMDocument) IS
nl DBMS_XMLDOM.DOMNodeList;
n DBMS_XMLDOM.DOMNode;
len number;
BEGIN
-- get all elements
nl := DBMS_XMLDOM.getElementsByTagName(doc, '*');
len := DBMS_XMLDOM.getLength(nl);
-- loop through elements
FOR i IN 0 .. len - 1 LOOP
n := DBMS_XMLDOM.item(nl, i);
testr := DBMS_XMLDOM.getNodeName(n) || ' ' || DBMS_XMLDOM.getNodeValue(n);
DBMS_OUTPUT.PUT_LINE (testr);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('');
END printElements;
Run Code Online (Sandbox Code Playgroud)
Luk*_*ard 12
你需要改变这条线
testr := DBMS_XMLDOM.getNodeName(n) || ' ' || DBMS_XMLDOM.getNodeValue(n);
Run Code Online (Sandbox Code Playgroud)
至
testr := DBMS_XMLDOM.getNodeName(n) || ' ' || DBMS_XMLDOM.getNodeValue(DBMS_XMLDOM.getFirstChild(n));
Run Code Online (Sandbox Code Playgroud)
在XML DOM中,元素没有任何"价值"可言.元素节点包含Text节点作为子节点,这些节点包含您想要的值.
编辑(响应Tomalak的评论):我不知道DBMS_XMLDOM中的任何函数来获取元素的所有子文本节点的组合值.如果这就是您所需要的,那么您可能需要使用类似以下功能的东西:
CREATE OR REPLACE FUNCTION f_get_text_content (
p_node DBMS_XMLDOM.DOMNode
) RETURN VARCHAR2
AS
l_children DBMS_XMLDOM.DOMNodeList;
l_child DBMS_XMLDOM.DOMNode;
l_text_content VARCHAR2(32767);
l_length INTEGER;
BEGIN
l_children := DBMS_XMLDOM.GetChildNodes(p_node);
l_length := DBMS_XMLDOM.GetLength(l_children);
FOR i IN 0 .. l_length - 1 LOOP
l_child := DBMS_XMLDOM.Item(l_children, i);
IF DBMS_XMLDOM.GetNodeType(l_child) IN (DBMS_XMLDOM.TEXT_NODE, DBMS_XMLDOM.CDATA_SECTION_NODE) THEN
l_text_content := l_text_content || DBMS_XMLDOM.GetNodeValue(l_child);
END IF;
END LOOP;
RETURN l_text_content;
END f_get_text_content;
/
Run Code Online (Sandbox Code Playgroud)