使用 Oracle 形式的 Xpath 读取和显示 html(xml) 文件中的元素

Posted

技术标签:

【中文标题】使用 Oracle 形式的 Xpath 读取和显示 html(xml) 文件中的元素【英文标题】:Read and display an element in a html(xml) file by using Xpath in oracle form 【发布时间】:2017-09-05 08:36:18 【问题描述】:

我想在我的 html 文件中读取“新值”列更改并在 Oracle 表单中使用 Xpath(4ex:/html/body/table/tbody/tr[1]/td[6] ) 显示元素值,我可以得到建议吗?

我的 oracle 形式的输出应该是:

0015: IF :NB_CNTRL.FROM_DATE IS NOT NULL THEN
0016: LV_SQL := LV_SQL || ' AND TRUNC(NB_RECEIPT_DATE) >= ''' ||to_char(:NB_CNTRL.FROM_DATE, 'dd-MON-rrrr')||'''';

sample of HTML file

<!-- saved from url=(0043)file:///c:/FRM_05.fmb.html -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <!--<base href="\\HTMLPictures\">--><base href=".">
  <style type="text/css">
        body,html,table font-family: "lucida grande",tahoma,verdana,arial,sans-serif;font-size: 12px;line-height: 1.5em;
  </style>
  <title>Compare</title>

</head>
<body>

<table  border="0">
<thead>
  <tr>
    <th >Name</th>
    <th >Changes</th>
    <th >&nbsp;</th>
    <th >Value Old</th>
    <th >&nbsp;</th>
    <th >Value New</th>
  </tr>
</thead>
<tbody>
<tr class="lin"><td class="lvl8">(adjoining line)</td><td></td><td class=""></td><td class="">0015:  IF :NB_CNTRL.FROM_DATE IS NOT NULL THEN</td><td class=""></td><td class="">0015:  IF :NB_CNTRL.FROM_DATE IS NOT NULL THEN</td></tr>
<tr class="lin"><td class="lvl8">(line changed)</td><td><img src="./Compare_files/changes_mod.gif"></td><td class="cmpChanged"></td><td class="cmpChanged">0016:    LV_SQL := LV_SQL || ' AND TRUNC(NB_RECEIPT_DATE) &gt;= ''' ||to_char(:NB_CNTRL.FROM_DATE, 'dd-MON-yyyy')||'''';</td><td class="cmpChanged"></td><td class="cmpChanged">0016:    LV_SQL := LV_SQL || ' AND TRUNC(NB_RECEIPT_DATE) &gt;= ''' ||to_char(:NB_CNTRL.FROM_DATE, 'dd-MON-rrrr')||'''';</td></tr>
</tbody>
</table>
</body></html>

【问题讨论】:

发布您的 xml,以便我们为您创建 xpath @shubham:我们有 XPath,问题是如何打开 html 文件,例如在 c# 中我们有 xml 阅读器,您可以通过它传递 xpath 并提取数据。现在,siti 的问题是如何解析 htnl 文件,有没有阅读器?最佳做法是什么? 首先,HTML 和 XML 都是不同的东西 .. 是的,它们都有 dom,但它们不同.. selenium 可以从 html 中读取元素,但不能从 XML 中读取元素……现在,如果您的来源是html ,你能告诉它是否托管在你的本地主机上,比如 localhost:8080 @ShubhamJain:请再次阅读我的问题,我添加了示例。除了使用硒还有其他方法吗?你有任何使用 Java 以 oracle 形式使用 selenium 的例子吗? 更新了我的答案 【参考方案1】:

ExtractValue 应该以 oracle 形式为您工作

XPath 会像:-

/html/body/table//thead/tr[1]/th[6]/text()  -> it will return ->  "0015: IF :NB_CNTRL.FROM_DATE IS NOT NULL THEN"

/html/body/table/tbody/tr[2]/td[6]/text()  -> it will return ->  "0016: LV_SQL := LV_SQL || ' AND TRUNC(NB_RECEIPT_DATE) >= ''' ||to_char(:NB_CNTRL.FROM_DATE, 'dd-MON-rrrr')||''''"

我没有甲骨文形式的经验,但应该是这样的:-

ExtractValue(Value(p),'/html/body/table//thead/tr[1]/th[6]/text()') as value

execute immediate 'alter session set events =''31156 trace name context forever, level 2''';

     l_xml := xmltype(l_clob);

     execute immediate 'alter session set events =''31156 trace name context off''';

     select extractvalue( l_xml
                        , '/html/body/table//thead/tr[1]/th[6]/text()' )
     into l_value
     from dual;

     dbms_output.put_line(l_value);

   end;

来源:-

XML Oracle: Extract specific attribute from multiple repeating child nodes

https://community.oracle.com/thread/2381518

此外,您只能使用 Selenium 测试基于 HTML 的网站。如果 Oracle 应用程序公开了可通过 Web 浏览器访问的基于 HTML 的前端,那么您可以使用 Selenium 对其进行测试,否则您不能。

如果您可以使用浏览器访问它,请告诉我,如果可以,那么我将在 java 中为您创建一个脚本,它将为您检索值。

【讨论】:

以上是关于使用 Oracle 形式的 Xpath 读取和显示 html(xml) 文件中的元素的主要内容,如果未能解决你的问题,请参考以下文章

xpath和css读取爬虫语法

xpath和css读取爬虫语法

xpath和css读取爬虫语法

java中使用xpath读取xml指定节点的属性的名称列表

Oracle APEX 表格形式选择列表禁用

如何在oracle中的blob字段下读取jpg格式文件保存