تحديد عنصر يستند إلى نص وسمة من شقيقه ، باستخدام XPath

StackOverflow https://stackoverflow.com/questions/2488117

  •  21-09-2019
  •  | 
  •  

سؤال

بالنظر إلى المستند ، فإن الهدف هو تحديد الخلية الثانية من الصف الثاني ، في الجدول الأول.

لقد قمت بإنشاء التعبير التالي:

//row/td[2]/text()[td[@class="identifier"]/span[text()="identifier"]]

لكنه لا يعيد أي صفوف. للأسف لا أرى ما هو الخطأ.

بالنسبة لي ، يبدو على ما يرام. يجب أن: التعبير:

select the text
    in the second cell 
        in any row
where
    the text of a span equals to "identifier"
        and the span is located in cell with a "identifier" class

سأقدر ذلك إذا تمكنت من الإشارة إلى ما أفعله خطأ.

عينة وثيقة XML:

<?xml version="1.0"?>
<html>
    <table class="first">
        <tr>
            <td>row 1, cell 1</td>
            <td>row 1, cell 2</td>
        </tr>
        <tr>
            <td class="identifier">
                <span>identifier</span>
            </td>
            <td>
                foo
                <span>ignore</span>
                bar
            </td>
        </tr>
        <tr>
            <td>row 3, cell 1</td>
            <td>row 3, cell 2</td>
        </tr>
    </table>

    <table class="second">
        <tr>
            <td>row 1, cell 1</td>
            <td>row 1, cell 2</td>
        </tr>
        <tr>
            <td class="identifier">
                <span>not an identifier</span>
            </td>
            <td>
                not a target
            </td>
        </tr>
        <tr>
            <td>row 3, cell 1</td>
            <td>row 3, cell 2</td>
        </tr>
    </table>
</html>
هل كانت مفيدة؟

المحلول

للوهلة الأولى فقط ، أعتقد أنك تقصد الكتابة:

//tr/td[2][@class="identifier"][span="identifier"]

الشيء الغريب هو أنني لا أرى أي عقد في بيانات العينة التي تتطابق مع جميع الشروط الثلاثة.

تعديل: بناءً على ردود الفعل ، إليك استعلام آخر لمحاولة.

//tr[td/@class="identifier"][td/span="identifier"]/td[2]/text()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top