使用条件 xpath 从 html 获取值

如何解决使用条件 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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?