Xpath:检测具有特定数据的节点的存在

时间:2013-08-30 12:14:34

标签: html xml xpath

以下是我的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>标签然后对其进行分析,但它太复杂而无法支持并且速度很慢。

3 个答案:

答案 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'] ]