使用条件 xpath 从 html 获取值

问题描述

我正在尝试从 Excel 中提取一些值。我正在使用定制的软件将 excel 转换为 html 代码集。我必须提取一些细节,这些细节实际上根据文档的布局改变了位置。下面是一种布局的一小部分,

<td data-cell="D10">ORDER #</td>
<td data-cell="E10" colspan="9">SO-10415</td>
<td data-cell="N10"">DATE OF</td>
<td data-cell="O10"rowspan="2">18.01.2021</td>

这是另一种布局类型,

<td data-cell="A20" colspan="3">SO Number : SO0010810</td>
<td data-cell="D20" colspan="2"></td>

所以我需要做一个条件检查,比如,

if(contains(.,'ORDER #'))
 then following-sibling::td[1]
 else contains(.,'SO Number')/@storedvalue

以上是不正确的,我只是想让你们知道我在做什么。我尝试了 SO 和其他网站中提到的许多方法。下面是我尝试过的几行代码,但都没有奏效。

1. //tr/td[if(contains(.,'ORDER #')) then following-sibiling::td[1] else contains(.,'SO Number')]

2. //tr/td[concat(substring('ORDER',1,number(text()='ORDER ') * string-length('ORDER')) substring('SO Number',number(not(text()='ORDER') )* string-length('So Number')))]

3. //tr/td[concat(substring('ORDER #',number(text()='ORDER #') * string-length('ORDER #'))]

4. (//tr/td[text()='ORDER #']/following-sibling::td[1] )| (//tr/td[not(text()='ORDER #')/@storedvalue])

excel 运行后通过文档映射器生成代码的实际部分。

布局类型 1

<tr style="height:22px;">
<td style="padding:0 2px;text-align:center;border:1px solid #000;vertical-align:bottom;">10</td>
<td data-cell="A10" style="border-color:#000;border-top:medium solid #000000;border-left:medium solid #000000;font-family:Calibri Light;font-size:11px;font-weight:700;padding-left:2px;padding-right:2px;">BILL TO:</td>
<td data-cell="B10" style="border-color:#000;border-top:medium solid #000000;font-family:Calibri Light;font-size:11px;padding-left:2px;padding-right:2px;"></td>
<td data-cell="D10" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-left:medium solid #000000;border-right:medium solid #000000;font-family:Calibri Light;font-size:11px;font-weight:700;padding-left:2px;padding-right:2px;">ORDER #</td>
<td data-cell="E10" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-left:medium solid #000000;border-right:medium solid #000000;font-family:Calibri Light;font-size:16px;font-weight:700;text-align:center;padding-left:2px;padding-right:2px;" colspan="9">SO-10415</td>
<td data-cell="N10" style="border-color:#000;border-top:medium solid #000000;border-left:medium solid #000000;border-right:medium solid #000000;font-family:Calibri Light;font-size:11px;font-weight:700;padding-left:2px;padding-right:2px;">DATE OF</td>
<td data-cell="O10" style="mso-number-format:'M/D/YY';border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-left:medium solid #000000;border-right:medium solid #000000;font-family:Calibri Light;font-size:11px;font-weight:700;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;" rowspan="2">18.01.2021</td>
</tr>
<tr style="height:21px;">
<td style="padding:0 2px;text-align:center;border:1px solid #000;vertical-align:bottom;">11</td>
<td data-cell="A11" style="border-color:#000;border-left:medium solid #000000;padding-left:2px;padding-right:2px;">MSFT MCIO Limited</td>
<td data-cell="B11" style="border-color:#000;font-family:Calibri Light;font-size:11px;padding-left:2px;padding-right:2px;"></td>
<td data-cell="D11" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-left:medium solid #000000;font-family:Calibri Light;font-size:11px;padding-left:2px;padding-right:2px;"></td>
<td data-cell="E11" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;font-family:Calibri Light;font-size:11px;padding-left:2px;padding-right:2px;"></td>
<td data-cell="F11" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;font-family:Calibri Light;font-size:11px;padding-left:2px;padding-right:2px;"></td>
<td data-cell="G11" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;font-family:Calibri Light;font-size:11px;padding-left:2px;padding-right:2px;"></td>
<td data-cell="H11" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;font-family:Calibri Light;font-size:11px;padding-left:2px;padding-right:2px;"></td>
<td data-cell="I11" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;font-family:Calibri Light;font-size:11px;padding-left:2px;padding-right:2px;"></td>
<td data-cell="J11" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;font-family:Calibri Light;font-size:11px;padding-left:2px;padding-right:2px;"></td>
<td data-cell="K11" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;padding-left:2px;padding-right:2px;"></td>
<td data-cell="L11" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;padding-left:2px;padding-right:2px;"></td>
<td data-cell="M11" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-right:medium solid #000000;padding-left:2px;padding-right:2px;"></td>
<td data-cell="N11" style="border-color:#000;border-bottom:medium solid #000000;border-left:medium solid #000000;border-right:medium solid #000000;font-family:Calibri Light;font-size:11px;font-weight:700;padding-left:2px;padding-right:2px;">NOTE:</td>
</tr>

布局类型 2

<tr style="height:29px;">
<td style="padding:0 2px;text-align:center;border:1px solid #000;vertical-align:bottom;">19</td>
<td data-cell="A19" style="border-color:#000;border-bottom:medium solid #000000;border-left:medium solid #000000;padding-left:2px;padding-right:2px;" colspan="3">Moss Lane Manchester,M45 8FJ</td>
<td data-cell="D19" style="border-color:#000;border-bottom:medium solid #000000;padding-left:2px;padding-right:2px;"></td>
<td data-cell="E19" style="border-color:#000;border-bottom:medium solid #000000;padding-left:2px;padding-right:2px;"></td><td data-cell="F19" style="border-color:#000;border-bottom:medium solid #000000;border-right:medium solid #000000;padding-left:2px;padding-right:2px;"></td>
<td data-cell="G19" style="border-color:#000;border-bottom:medium solid #000000;border-left:medium solid #000000;padding-left:2px;padding-right:2px;">LON22</td>
<td data-cell="H19" style="border-color:#000;border-bottom:medium solid #000000;padding-left:2px;padding-right:2px;"></td>
<td data-cell="I19" style="border-color:#000;border-bottom:medium solid #000000;padding-left:2px;padding-right:2px;"></td>
<td data-cell="J19" style="border-color:#000;border-bottom:medium solid #000000;padding-left:2px;padding-right:2px;"></td>
<td data-cell="K19" style="border-color:#000;border-bottom:medium solid #000000;padding-left:2px;padding-right:2px;"></td>
<td data-cell="L19" style="border-color:#000;border-bottom:medium solid #000000;border-right:medium solid #000000;padding-left:2px;padding-right:2px;"></td>
</tr>
<tr style="height:21px;"><td style="padding:0 2px;text-align:center;border:1px solid #000;vertical-align:bottom;">20</td>
<td data-cell="A20" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-left:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;padding-left:2px;padding-right:2px;" colspan="3">SO Number : SO0010810</td>
<td data-cell="D20" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-right:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;padding-left:2px;padding-right:2px;" colspan="2"></td>
<td data-cell="F20" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-left:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;padding-left:2px;padding-right:2px;" colspan="2">MSPO# 80272185</td>
<td data-cell="H20" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-left:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;padding-left:2px;padding-right:2px;" colspan="2">Incoterms : DDP</td>
<td data-cell="J20" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-right:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;padding-left:2px;padding-right:2px;" colspan="3">Mode of Transport : Air Freight</td></tr><tr style="height:22px;"><td style="padding:0 2px;text-align:center;border:1px solid #000;vertical-align:bottom;">21</td>
<td data-cell="A21" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-left:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;padding-left:2px;padding-right:2px;" colspan="3">Ship Date : 23/02/2021</td>
<td data-cell="D21" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;padding-left:2px;padding-right:2px;" colspan="4">Sales Contact : NIAMH CULLEN</td>
<td data-cell="H21" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;padding-left:2px;padding-right:2px;" colspan="3">Inbound I.D<span style="font-size:16px;"> </span></td>
<td data-cell="K21" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-right:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;padding-left:2px;padding-right:2px;" colspan="2">Currency :  GBP £</td>
</tr>
<tr style="height:21px;"><td style="padding:0 2px;text-align:center;border:1px solid #000;vertical-align:bottom;">22</td>
<td data-cell="A22" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-left:medium solid #000000;border-right:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;padding-left:2px;padding-right:2px;">Line Item </td>
<td data-cell="B22" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-left:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;text-align:center;padding-left:2px;padding-right:2px;" colspan="2">Part Number</td>
<td data-cell="D22" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;text-align:center;padding-left:2px;padding-right:2px;" colspan="4">Description </td>
<td data-cell="H22" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;text-align:center;padding-left:2px;padding-right:2px;">COO</td>
<td data-cell="I22" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;text-align:center;padding-left:2px;padding-right:2px;">HTS Code</td>
<td data-cell="J22" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;text-align:center;padding-left:2px;padding-right:2px;">Quantity</td>
<td data-cell="K22" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;text-align:center;padding-left:2px;padding-right:2px;">Unit Price</td>
<td data-cell="L22" style="border-color:#000;border-top:medium solid #000000;border-bottom:medium solid #000000;border-right:medium solid #000000;background-color:#000000;color:#FFFFFF;font-weight:700;text-align:center;padding-left:2px;padding-right:2px;">Total</td>
</tr>

期望输出

所以希望得到它包含“ORDER #”或“SO Number”的位置的值。如果单词是“ORDER #”,那么我想获取一个单元格的值,即“SO-10415”。否则获取包含“SO 编号”的单元格的值,在当前情况下它将是“SO 编号:SO0010810”。所以应该像下面这样。

If word contain (or equal) "ORDER #" output should be SO-10415.
If word contain (or equal) "SO Number" output should be SO Number : SO0010810.

而且我认为该软件使用的是 xpath v 1.0 而不是 2.0。但我确实更喜欢有一个适合两个版本的解决方案,如果可能的话,但任何一个都会被接受。在阅读了更多帖子后,我尝试构建一个解决方案,但仍然没有成功。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...