2013-08-30 27 views
0

以下是我的xml的兩個摘錄。Xpath:檢測具有特定數據的節點的存在

我摘錄:

<tr> 
    <td> 
     <label>Attribute Name</label> 
    </td> 
    <td> 
     <input> 
     <div class="formCellError">Error message</div> 
    </td> 
</tr> 

摘錄二:

<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-path表達式檢測節點的存在?我設計了一個解決方案,該方案檢索<tr>標籤,然後對其進行分析,但它太複雜而且支持非常慢。

+0

*如何檢測具有單個X路徑表達式的節點的存在性* ..您想要測試哪個節點? –

回答

0

以下XPath表達式檢測位於特定屬性旁邊的特定錯誤。適用於摘錄I和摘錄II

//tr[//label/text()='Attribute Name' and //div[@class='formCellError' and text()='Error message'] ] 
0

如果你問你如何找到包含與類的「formCellError」一個DIV中的所有節點TR,那麼你可以做到這一點與這個XPath:

//tr[.//div[@class='formCellError']] 

如果你問如何發現在包含DIV與類「formCellError」的TR的所有標籤,然後使用這個XPath:

//tr[.//div[@class='formCellError']]//label 
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 :) 
    ] 
相關問題