そもそもXPathがちゃんと分かってないのかも

//td[@width="640" and @align="center"]/ancestor::table[last()]/following-sibling::node()[1]

ancestor::table[last()] ってどこになるよ?この属性が付いた td の祖先ノードの table を列挙して最後の、って意味は分かるけど。それってこの td が所属してる table じゃないのかなあ?俺分かってない?
いや別に合ってるならいいんだけど。
基準点のswitch文書いて、最初のancestorの部分だけで飽きてきた。ことが分かる。
パース通るように整形して、XMLDOMで読んでXPathで取って、取ったノードのフルパスからHTMLDOMで取り直して返す。というのはどうか。