以下是我的xml的两个摘录。
摘录I:
<tr>
<td>
<label>Attribute Name</label>
</td>
<td>
<input>
<div class="formCellError">Error message</div>
</td>
</tr>
摘录II:
<tr>
<td>
<span>
<b>
<label>Attribute Name</label>
</b>
</span>
<input>
<div class="formCellError">Error message</div>
</td>
</tr>
如您所见,theese节点的结构不同。第1段摘录<label>
和<div>
位于相同的<td>
标记内,而第2段摘录<label>
和<div>
位于不同的<td>
内标签
我需要测试,在同一个<td>
节点中或者至少在前一个兄弟<td>
节点中有一个错误消息的节点。 <td>
节点由标签
您是否有想法,如何使用单个X路径表达式检测节点的存在?我设计了一个解决方案,即检索<tr>
标签然后对其进行分析,但它太复杂而无法支持并且速度很慢。
答案 0 :(得分:1)
查看示例,您不是在前面的第一个兄弟中查找错误,而是跟随兄弟。如果没有,请修改查询以改为使用preceding-sibling
轴步骤。
您可能必须先删除(: comments :)
才能运行;我使用XQuery注释语法来解释查询。
//td (: find table cells :)
[.//label] (: having a label in it :)
[
.//div[@class='formCellError'] (: and an error in the same cell :)
or
following-sibling::td[1]//div[@class='formCellError'] (: the following cell :)
]
答案 1 :(得分:0)
如果您问如何找到包含类型为“formCellError”的DIV的所有TR节点,那么您可以使用此XPath执行此操作:
//tr[.//div[@class='formCellError']]
如果您问如何查找TR中包含类型为“formCellError”的所有标签,请使用此XPath:
//tr[.//div[@class='formCellError']]//label
答案 2 :(得分:0)
以下XPath表达式检测特定属性旁边的特定错误。为摘录I和摘录II工作很好
//tr[//label/text()='Attribute Name' and //div[@class='formCellError' and text()='Error message'] ]