【问题标题】:XPath Ancestor Axis Multiple ParentsXPath 祖先轴多个父项
【发布时间】:2010-07-09 02:23:37
【问题描述】:

所以我正在编写一个使用 xpath 解析 SF Giants 棒球统计数据的 mac 应用程序。在我的情况下,我有一个人的特定数字标识符<td class="textSm" align="right">1. </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.')],它将找到我的号码标识符。我无法工作的是一直退回到统计信息所在的父节点&lt;tr&gt;。我最好的猜测是做//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]。任何感谢将不胜感激。

【问题讨论】:

    标签: objective-c xpath hpple


    【解决方案1】:

    对于提供的 XML 片段,以下 XPath 表达式将定位似乎是所需的节点:

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

    这将选择使用问题中提供的 XPath 表达式标识的节点的第一个祖先 &lt;tr&gt; 的第一个祖先 &lt;tr&gt;

    【讨论】:

    • 感谢您的回答,但我有一个问题,当我使用我的程序运行它时,这将带我到哪个节点,它什么也不返回。这只是将我带到作为所有这些代码的父节点的 节点,还是将我带到 的第二个元素,即  。我需要什么代码来专门获取统计信息... /ancestor::tr[4]?谢谢:)
    • @user380776 :这会将您带到您指定为想要的节点:&lt;tr&gt; &lt;! The node I need to back out into &gt; 。它是&lt;td class="textSm" align="right"&gt;1.&amp;nbsp;&lt;/td&gt; 的第二个tr 祖先。
    • 非常感谢您的帮助,但我仍然无法使其正常工作。每次我尝试调用 '.../ancestor::tr[4]' 来获取统计信息时,我的解析器都会崩溃。为什么 '.../ancestor::tr[2]' 会将我们带到 '1. ' 正上方的 '' 节点?再次感谢您的帮助。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签