我正在使用oracle apex和pl / sql解析远程服务器上的XML文件。我使用APEX_WEB_SERVICE.MAKE_REST_REQUEST
将xml文件转换为clob变量,然后使用XPATH和XMLTable获取特定文本。
这是我的一个示例XML文件(请注意,原始文件非常复杂,这只是文件中内容的表示):
<article>
<index>
<term>term1</term>
<term>term2</term>
</index>
<ul>
<li>this is text with term1</li>
</ul>
<p>this is another text with term1</p>
<p>this is text with term2</p>
</article>
<article>
<index>
<term>term2</term>
<term>term3</term>
</index>
<ul>
<li>this is text with term2</li>
</ul>
<p>this is another text with term1</p>
<p>this is text with term2</p>
</article>
以下是我要对此文件进行的操作:
在这个例子中,我应该得到以下内容:
li: this is text with term1
p: this is another text with term1
等等。
我能够进行一般文本搜索,但它会返回文章下的所有内容,而不仅仅是所需的元素。对于此示例,我会在结果中获得ul
以及li
,因为我只需要li
及其中的文本。
FOR r IN ( SELECT rownum rn, termtext
FROM xmltable('/article//*[contains(.,"term1")]' passing XMLTYPE(sourceXML)
columns termtext VARCHAR2(500) PATH '.')
)
LOOP
DBMS_OUTPUT.PUT_LINE('Row: '||r.rn);
DBMS_OUTPUT.PUT_LINE('Text: '||r.termtext);
END LOOP;
sourceXML
是包含xml文件的clob。
有人可以建议使用正确的xpath吗?