आपको लाइन बदलनी होगी
testr := DBMS_XMLDOM.getNodeName(n) || ' ' || DBMS_XMLDOM.getNodeValue(n);
करने के लिए
testr := DBMS_XMLDOM.getNodeName(n) || ' ' || DBMS_XMLDOM.getNodeValue(DBMS_XMLDOM.getFirstChild(n));
एक्सएमएल डोम में, तत्वों के पास बोलने के लिए कोई 'मान' नहीं है। एलिमेंट नोड्स में बच्चों के रूप में टेक्स्ट नोड्स होते हैं, और ये नोड्स होते हैं जिनमें वे मान होते हैं जो आप चाहते हैं।
संपादित करें (टोमालक की टिप्पणी के जवाब में):मुझे किसी तत्व के सभी बाल टेक्स्ट नोड्स का संयुक्त मूल्य प्राप्त करने के लिए डीबीएमएस_एक्सएमएलडीओएम में किसी भी फ़ंक्शन से अवगत नहीं है। यदि आपको यही चाहिए, तो आपको निम्न फ़ंक्शन की तरह कुछ उपयोग करने की आवश्यकता हो सकती है:
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;
/