0

我正在尝试识别 XML 字符串中的“节点”。我对 Oracle XML 函数没有任何经验。XML 字符串是在 Stroed 过程中使用 XMLElement 和 XMLAgg 函数生成的。如何识别节点 RESULT.NAME 的值?

我已经在存储过程中声明了一个变量,并尝试了以下方法,但存储过程无法编译。它给了我一个错误,说“语句被忽略” vRepResults := XMLResults.EXTRACT('ZAVACOR_RESULTS/ORDERS/SAMPLE/TEST/RESULT/REPORTED_RESULT/text()').getstringval();

该字符串存储在变量中,而不是表中,因此我不确定是否可以使用 XQuery 函数。我在下面粘贴了示例 XML:

<ZAVACOR_RESULTS>
    <ORDERS>
        <X_EXTERNAL_ID>508106</X_EXTERNAL_ID>
        <X_ZAV_PROTOCOL></X_ZAV_PROTOCOL>
        <SAMPLE>
            <LABEL_ID>352453611</LABEL_ID>
            <STATUS>I</STATUS>
            <TEST>
                <ANALYSIS>_GLUCOSE_SO1_ENZ_001</ANALYSIS>
                <STATUS>I</STATUS>
                <RESULT>
                    <NAME>GLUCOSE</NAME>
                    <REPORTED_RESULT>
                        <REPORTED_VALUE>3</REPORTED_VALUE>
                    </REPORTED_RESULT>
                </RESULT> 
            </TEST>
        </SAMPLE>
        </ORDERS>
</ZAVACOR_RESULTS> 
4

1 回答 1

1

下面的代码提取标签内的值。我不确定你的代码有什么问题,你能提供更多吗?声明vRepResultsXMLResults变量,如果你愿意的话,方法XMLResults是创建的。

DECLARE
  v_name VARCHAR2(200);
  v_xml_str VARCHAR2(2000);
BEGIN
  v_xml_str := 
  '<ZAVACOR_RESULTS>
    <ORDERS>
        <X_EXTERNAL_ID>508106</X_EXTERNAL_ID>
        <X_ZAV_PROTOCOL></X_ZAV_PROTOCOL>
        <SAMPLE>
            <LABEL_ID>352453611</LABEL_ID>
            <STATUS>I</STATUS>
            <TEST>
                <ANALYSIS>_GLUCOSE_SO1_ENZ_001</ANALYSIS>
                <STATUS>I</STATUS>
                <RESULT>
                    <NAME>GLUCOSE</NAME>
                    <REPORTED_RESULT>
                        <REPORTED_VALUE>3</REPORTED_VALUE>
                    </REPORTED_RESULT>
                </RESULT> 
            </TEST>
        </SAMPLE>
    </ORDERS>
  </ZAVACOR_RESULTS>';

  v_name := xmltype(v_xml_str).extract('/ZAVACOR_RESULTS/ORDERS/SAMPLE/TEST/RESULT/NAME/text()').getStringVal();

  dbms_output.put_line(v_name);
END;

输出:

葡萄糖
于 2013-11-11T23:06:00.883 回答