1

暗黒時代のある時期に、次の html を出力するスクリプトが作成されました。

...
<TABLE BORDER=0 FRAME=ALL_FRAMES RULES=ALL_RULES ALIGN=CENTER BGCOLOR="ffffe5">
<CAPTION ALIGN=TOP>
<FONT  COLOR=009594 SIZE=-1><B>Access Information</B></FONT>
</CAPTION>
<TR>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
<FONT  COLOR=black SIZE=-1><B>Access Circuit(s):</B></FONT>
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
**DATA TO COLLECT 111**
</TD>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
<FONT  COLOR=black SIZE=-1><B>Other Circuit(s):</B></FONT>
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
&nbsp
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
&nbsp
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
**DATA TO COLLECT AAA**
</TD>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
&nbsp
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
&nbsp
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
&nbsp
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
**DATA TO COLLECT BBB**
</TD>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
&nbsp
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
&nbsp
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
&nbsp
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
**DATA TO COLLECT CCC**
</TD>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
&nbsp
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
&nbsp
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
<FONT  COLOR=black SIZE=-1><B>Customer:</B></FONT>
</TD>
...

<table>申し訳ありませんが、テーブルのレイアウトをお見せしますが、 SOなしではどうすればよいかわかりません

DATA TO COLLECTXPATH (PHP) を使用して各セクションのみを収集するにはどうすればよいですか? これまでのところ、で最初の行を取得できました//*[*='Access Circuit(s):']/following-sibling::td[1]

注意事項:

  • これは、大きなドキュメントのほんの一部です。
  • スクリプトの出力を変更できません。
  • 行数はわかりません (図 0 ~ 6)。
  • データは常に同じ「列」にあると想定する必要があります。
  • 私は XPATH バージョン 1 しか持っていないかもしれませんが、バージョン 2 の回答はまだ歓迎されています。
4

1 に答える 1

1

私が思いついた表現は次のとおりです。

//TR[(.//B[.='Access Circuit(s):']) or ((./preceding-sibling::TR//B[.='Access Circuit(s):']) and (./following-sibling::TR//B[.='Customer:']))]//TD[2]

戻り値

<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT 111**</TD>
<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT AAA**</TD>
<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT BBB**</TD>
<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT CCC**</TD>

Access Circuit(s):これは、最初の行に が含まれ、収集されていない最初の行に が含まれているという知識を使用しますCustomer:。どちらかが確実でない場合、単一の XPath 式では実行できないと思います。

Step-by-step
1. //TR[
2.     (.//B[.="Access Circuit(s):"])
3.     or (     (./preceding-sibling::TR//B[.="Access Circuit(s):"])
4.          and (./following-sibling::TR//B[.="Customer:"]) )
5.     ]//TD[2]

Means
1. all TR nodes
2. that either contain "Access Circuit(s):"
3. or
    - (3.) are positioned after "Access Circuit(s):"
    - (4.) and are positioned before "Customer:"
5. all TD nodes that are the second TD of their parents
于 2012-06-26T02:52:34.267 に答える