XPath Ancestor Axis Несколько Родителей - PullRequest
0 голосов
/ 09 июля 2010

Итак, я пишу mac-приложение, которое анализирует статистику бейсбола SF Giants с помощью xpath.В моей ситуации у меня есть конкретный числовой идентификатор человека <td class="textSm" align="right">1.&nbsp;</td> (в моем приложении человек мог бы найти статистику, основанную на вводе числа), но оттуда мне нужно вернуться из этого места в HTML и перейти кпервый узел, где я могу получить фактическую статистику в нижней части HTML.

    <tr>  <! The node I need to back out into >

    <td><img src="/images/trans.gif" width="1" height="1" border="0" /></td>        
    <td>&nbsp;</td> 

    <td> 
        <table border="0" cellspacing="0" cellpadding="0"> 
            <tr> 
                <td class="textSm" align="right">1.&nbsp;</td> <! Number Identifier here >
                <td align="left" nowrap>
                      <a href="/stats/individual_stats_player.jsp?c_id=sf&playerID=467055" class="textSm">P Sandoval</a>
                </td> 
            </tr> 
        </table> 
    </td>   

    <td align="center">SF</td>  <! list of statistics starts here >
    <td align="center">3B</td> 
    <td align="center">83</td> 
    <td bgcolor="#CCCCCC" align="center">326</td> 
    <td align="center">41</td> 
    <td align="center">88</td> 
    <td align="center">18</td> 
    <td align="center">2</td> 
    <td align="center">6</td> 
    <td align="center">34</td> 
    <td align="center">128</td> 
    <td align="center">27</td> 
    <td align="center">45</td> 
    <td align="center">2</td> 
    <td align="center">2</td> 
    <td align="center">.324</td> 
    <td align="center">.393</td> 
    <td align="center">.270</td> 
</tr> 

Пока у меня есть //table[@border='0' and @cellspacing='0' and @cellpadding='0']/tr/td[starts-with(., '1.')], который найдет мой номер идентификатора.То, что я не могу заставить работать, - это вернуться назад к родительскому узлу <tr>, где находится статистика. Мое лучшее предположение - сделать //table[@border='0' and @cellspacing='0' and @cellpadding='0']/tr/td[starts-with(., '1.')]/ancestor::tr/ancestor::table/ancestor::td/ancestor::tr[1(or any other number for the statistic i want].Любая благодарность будет принята с благодарностью.

1 Ответ

2 голосов
/ 09 июля 2010

Для предоставленного фрагмента XML следующее выражение XPath найдет то, что кажется нужным узлом:

//table[@border='0' and @cellspacing='0' and @cellpadding='0']
          /tr/td[starts-with(., '1.')] 
                         /ancestor::tr[2]

Выбирает первого предка <tr> первого предка <tr> узла, идентифицированного с помощью выражения XPath, приведенного в вопросе.

...