0

2 人の親 (偉大な祖父母) または 2 人の子供をダウンさせたいですか?

<table style="background-color: #008000; border-style: none;" border="0" cellpadding="2" cellspacing="2">
  <tr>
    <td>
      <img height="5" width="5" border="0" src="https://spacer.gif" title="07:00,24hrs: B Shift /.../E704/RS704/Firefighter #2" alt="07:00,24hrs: B Shift /.../E704/RS704/Firefighter #2">
    </td>
  </tr>
</table>
<img height="2" width="2" border="0" src="https://spacer.gif" alt="">
  <img alt="" height="1" width="1" border="0" src="https://spacer.gif">
    </td>
    <TD ALIGN="RIGHT" VALIGN="TOP" width="17%">
      <a href="javascript:void(0)" title="01/15/2013" class="daylink" onClick="return DayClick('01/15/2013');">15</a>
    </TD>
    <td rowspan="2" width="5">
      <img alt="" height="1" width="1" border="0" src="https://spacer.gif">
    </td>
    </tr>
    <tr>
      <TD COLSPAN="2">
        <TABLE>
          <TR>
            <TD style="background-color: #41FFB9; " class="calexception">
              <a href="javascript:void(0)" onClick="return ShowRemoveExceptionWindow(&quot;4A30E80.fre01&quot;,&quot;3280530&quot;);" title="10hrs DetNonEMSStud(10),  07:00 - 17:00" style="color: #000000; text-decoration: none; font-weight: bold;">DetNonEMSStud(10)</a>
            </TD>
          </TR>
        </TABLE>

iOS:

NSString *tutorialsXpathQueryString = @"//table/tr/td";
NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString];
NSLog(@"here is url: %@", tutorialsNodes);

NSMutableArray *newTutorials = [[NSMutableArray alloc] initWithCapacity:0];
for (TFHppleElement *element in tutorialsNodes) {

    Tutorial *tutorial = [[Tutorial alloc] init];
    [newTutorials addObject:tutorial];

    tutorial.url = [element objectForKey:@"style"];
    tutorial.title = [[element firstChild] objectForKey:@"title"];

私はからスタイル<td>とタイトルを<a>うまく取得しています。また、からスタイルを取得する必要があります<table>

私はobj-cに非常に慣れていないため、XPATHを初めて使用します。どのサンプルも素晴らしいでしょう!

4

1 に答える 1

1

td私は TFHpple を使用していませんが、標準の XPath をサポートしている場合は、次の XPath を使用してからそのテーブルに移動できるはずです。

ancestor::table[1]

この XPath は、コンテキスト ノードの祖先である最も近いテーブルを選択するため、このマークアップがある場合:

<table>
    <tr><td></td></tr>
    <tr>
       <td>
         <table><tr><td></td></tr></table>
         <table>
             <tr>
                 <td>Hey!</td>
             </tr>
         </table>
       </td>
    </tr>      
</table>

そして、コンテキスト ノードがtd"Hey!" というテキストの場合、上記の XPath は 6 行目のテーブルを選択します。

TFHpple は、コンテキスト ノードで XPath を評価する方法を提供していないようです。それを考えると、新しい提案 - すべての要素には親が 1 つしかないため、親をたどっていくと、最終的にテーブルが見つかるはずです。要素は、それぞれ独自の子のセットを持つ直接の子をいくつでも持つことができるため、下に行くのははるかに困難です。Objective-C についてはよくわかりませんが、テーブルが 2 レベル上にあることが確実であれば、次のようなものがうまくいくでしょう。

TFHppleElement *table = [[element parent] parent];

テーブルが 2 レベル上にあるという保証がない場合は、親を介してテーブルを見つける方法が必要です。これは疑似コードですが、うまくいけばアイデアが得られます:

for (TFHppleElement *element in tutorialsNodes) {

    Tutorial *tutorial = [[Tutorial alloc] init];
    [newTutorials addObject:tutorial];

    tutorial.url = [element objectForKey:@"style"];
    tutorial.title = [[element firstChild] objectForKey:@"title"];

    TFHppleElement *table = [element parent];
    while(table != null && [table tagName] != "table") {
        table = [table parent]
    }

    // table should either be the parent table at this point, 
    //  or null if there was no parent table.
于 2013-01-28T16:29:22.937 に答える