我目前在使用 PL/SQL 解析一些 XML 时遇到问题。本质上,我有一些 XML 存储在现有函数提供的 clob 变量中。我创建了一个新的 xmltype 变量,用于将 clob 转换为 xmltype。然后我循环遍历这个新的 xmltype 变量的内容,试图提取每个标签的内容并将其输出到自己的 div 中。然而,我的代码目前只是将所有标签的内容输出到一个 div 中,这给人的印象是它根本没有循环。
XML 结构是(显然嵌套了更多的内部标签作为回报):
<?xml version="1.0" encoding="UTF-8"?>
<results>
<return>
<createDate> Date 1 Here </createDate>
<description> Description 1 here </description>
</return>
<return>
<createDate> Date 2 Here </createDate>
<description> Description 2 here </description>
</return>
</results>
我用来循环的PLSQL可以在这里找到:
-- parsing : Parse the xml and wrap description content in a html div
l_html_build := '<!DOCTYPE html><html><head></head><body>';
l_parse_xml := (xmltype(l_xml_response));
l_parse_xml_index := 1;
while l_parse_xml.existsNode('//description[' || To_Char(l_parse_xml_index) || ']') > 0
loop
l_html_build := l_html_build || '<div class="description">';
l_html_build := l_html_build || (xmltype(l_xml_response).extract('//description[' || To_Char(l_parse_xml_index)
|| ']/text()').getclobval());
l_html_build := l_html_build || '</div>';
l_html_build := replace(l_html_build,'<','<');
l_html_build := replace(l_html_build,'>','>');
l_html_build := replace(l_html_build,'&lt;','');
l_html_build := replace(l_html_build,'&gt;','');
l_html_build := replace(l_html_build,'&nbsp;',' ');
l_html_build := l_html_build ||'</body></html>';
l_parse_xml_index := l_parse_xml_index + 1;
end loop;
一些参数和变量的解释可以在下面找到:
l_xml_response clob; -- XML from another function is stored here
l_html_build clob; -- Used as a variable to store the output to be sent to the page
l_parse_xml xmltype; -- l_xml_response content is passed into this xmltype variable which is used for parsing
l_parse_xml_index number; -- Used as an index to assist with looping through the tags
输出如下:
<div class = "description">
Description 1 here Description 2 here
</div>
什么时候应该:
<div class = "description">
Description 1 here
</div>
<div class = "description">
Description 2 here
</div>
任何帮助都将不胜感激,因为我是一个 html/css/php/javascript 程序员,而且我以前没有真正做过 PL/SQL(而且我的老板并没有真正提供任何没有帮助的真正培训) .
提前致谢!