0

これが私のxmlの2つの抜粋です。

抜粋 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>

ご覧のとおり、これらのノードの構造は異なります。最初の抜粋<label><div>は と は同じ<td>タグ内にありますが、2 番目の抜粋<label>では と<div>は異なる<td>タグ内にあります。

<td>同じノード、または少なくとも前の兄弟ノードにエラーメッセージのあるノードがあることをテストする必要があり<td>ます。<td>ノードはラベルによって指定されます

単一の X パス式でノードの存在を検出する方法はありますか? タグを取得し<tr>て分析するソリューションを設計しましたが、サポートするには複雑すぎて非常に遅いです。

4

3 に答える 3

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 :)
  ]
于 2013-08-30T16:40:57.830 に答える
0

次の XPath 式は、特定の属性の隣にある特定のエラーを検出します。抜粋 I と抜粋 II に適しています

//tr[//label/text()='Attribute Name' and //div[@class='formCellError' and text()='Error message'] ]
于 2015-04-09T13:49:51.027 に答える