通过 PL SQL 读取 XML(存储在 Long 变量中)

Posted

技术标签:

【中文标题】通过 PL SQL 读取 XML(存储在 Long 变量中)【英文标题】:Read XML (stored in Long Variable) through PL SQL 【发布时间】:2012-01-04 21:21:13 【问题描述】:

我们使用的是 Oracle 11g2 数据库。我们在 Long 列/变量中有一些 xml 内容。

谁能帮我读取xml属性值?

例如。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE labels SYSTEM "label.dtd">
<labels _QUANTITY="1" _JOBNAME="LBL213685">
<label _FORMAT="XE_INSP_REQ_LBL.lwl">
<variable name= "L_DATE">04-JAN-2012</variable>
<variable name= "L_TIME">10:45:17</variable>
<variable name= "L_LPN">K01-4713BE</variable>
<variable name= "L_SUPPLIER">RECISION OIL, INC</variable>
</label>
</labels>

我们想读取 &lt;variable name= "L_LPN"&gt; 旁边的值。需要以编程方式返回K01-4713BE

【问题讨论】:

不使用long,有没有考虑使用xmltype?这将为您提供内置功能,您不会将其存储为大字符串。 【参考方案1】:

试试这个:

declare
  v_parser Xmlparser.Parser;
  v_doc    XMLDOM.DOMDocument;
  v_nl     XMLDOM.DOMNodeList;
  v_node   XMLDOM.DOMNode;

  v_your_xml LONG := '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' ||
                    /*'<!DOCTYPE labels SYSTEM "label.dtd">*/
                     '<labels _QUANTITY="1" _JOBNAME="LBL213685">' ||
                     '<label _FORMAT="XE_INSP_REQ_LBL.lwl">' ||
                     '<variable name= "L_DATE">04-JAN-2012</variable>' ||
                     '<variable name= "L_TIME">10:45:17</variable>' ||
                     '<variable name= "L_LPN">K01-4713BE</variable>' ||
                     '<variable name= "L_SUPPLIER">RECISION OIL, INC</variable>' ||
                     '</label></labels>';

begin

  v_parser := Xmlparser.newParser;
  xmlparser.setValidationMode(v_parser, TRUE);

  Xmlparser.parseBuffer(v_parser, v_your_xml);

  v_doc := Xmlparser.getDocument(v_parser);

  v_nl   := xslprocessor.selectNodes(XMLDOM.makeNode(v_doc),
                                     '/labels/label/variable[@name="L_LPN"]');
  v_node := XMLDOM.getFirstChild(XMLDOM.item(v_nl, 0));

  dbms_output.put_line(XMLDOM.getNodeValue(v_node));

end;

请注意,xslprocessor.selectNodes 函数有一个 XPath 选择器,因此您可以选择任何您想要的内容

【讨论】:

正确感谢回复

以上是关于通过 PL SQL 读取 XML(存储在 Long 变量中)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PL/SQL 中读取 Result 标头 XML 标记

从 PL/SQL 开发人员处读取 XML 文件

使用 PL SQL 读取 XML 元素的出现

如何将 PL/SQL 的输出(XML)存储在 oracle 表中

在 PL-SQL 存储过程中为 XML 中的每个段生成唯一 ID

读取 XML 格式的字符串并使用 PL SQL 中的 for 循环进行更新