我正在尝试识别XML字符串中的“节点”。我对Oracle XML Functions没有任何经验。 XML字符串是使用XMLElement和XMLAgg函数在Stroed过程中生成的。如何识别节点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>
答案 0 :(得分:1)
下面的代码提取标记内的值。我不确定你的代码有什么问题,你能提供更多吗?如果愿意,可以声明vRepResults
和XMLResults
变量以及创建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;
输出:
GLUCOSE