0

この質問を簡単に説明する方法は思い浮かびませんが、見た目ほど複雑ではありません。基本的に、私は自分の職場で昇進するのを助けるための小さなプロジェクトを持っています (現在技術サポート エージェントで、Web 開発のパートタイムを探しています: 私は現在コードに飢えていますが、技術サポートは満足のいくものではありません)

そこで私は、問題やサイトの問題が発生したときに技術担当者に最新情報を提供する小さなプログラムを作成すると言いました。停止と呼ばれる小さなWebページから情報を取得します(私の意見では悲惨です.wccバリデーターで177エラーです)

Web 開発者は、テーブルと ID、ある種のセキュリティ ホールを提供するだけではありませんか? 方法はわかりませんが、私より上の人たちに質問するつもりはありません。彼らに反対するのではなく、彼らと協力しようとしています。

テーブル自体にはIDがありませんが、内部の列にはIDがあります(スパンID)。

<table width="100%" border="0">
<tbody>
<tr id="title">
    <td width="9%">Date/Time</td>
    <td width="24%">program/site</td>
    <td width="5%">Ticket</td>
    <td width="*">Issue</td>
    <td width="2%">More</td>
</tr>

<tr>
    <td><span id="date">2011-01-27 17:32</span></td>
    <td><span id="site"><a id="fus_00001"></a>sample area or program affected</span></td>
    <td><span id="site"><a href="https://sample php file i cant give you" target="_blank">12345671</a></span></td>
    <td><span id="issue">problem identified/ investiating</span></td> 
    <td><span id="ticket"></span></td>
</tr><tr>

私はこれに Java を使用しており、すべての意図と目的のために Java を使用しています。htmlunit 2.8 を使用している情報を解析するには

現時点で使用しているコードは次のとおりです。IDなしでこれらのテーブルを取得する方法がわかりません。

String update = "blank";

final WebClient webClient = new WebClient();
webClient.setJavaScriptEnabled(false);// javascript causes some serious problems.
webClient.setCssEnabled(false);

HtmlPage page;

try 
{
    URL outageURL = new URL("file:\\C:\\Users\\MYDRIVE\\Desktop\\version control\\OUTAGE\\Outages.htm"); //local drive at home

    page = webClient.getPage(outageURL);

    //final HtmlTable table = page.getHtmlElementById("outages");// if the table had the id "outages, this would be perfect! but alas it doesnt

    final HtmlTable table = page.get//the cells int eh table by some other means

    update = (table.getCellAt(1,0).asText() + "   " + table.getCellAt(1,1).asText() + "   " + table.getCellAt(1,2).asText() + "   " + table.getCellAt(1,3).asText());
// above code takes the cells and combines them
} catch and everything else

return update;

つまり、ID を使用せずに他の方法でこれらのテーブルにアクセスする方法を知っている人はいますか。多分スパンID?ps 私は api hor html ユニットを調べましたが、有用なものを見つけることができるかどうかはわかりません。


final String stringHtmlTable = page.getPage().asXml();

これを行う場合、xpath を使用して、マークの応答に従って目的のセルに移動するにはどうすればよいでしょうか。PSはxmlにまったく慣れていません

4

2 に答える 2

2

xpathの良い例を見つけるのは、とてつもなく大変でした。

結局、これはスパンIDによってそれぞれの詳細を取得しました

        Object[] dates = page.getByXPath("//span[@id='date']/text()").toArray();
        Object[] sites = page.getByXPath("//span[@id='site']/text()").toArray();
        Object[] issues = page.getByXPath("//span[@id='issue']/text()").toArray();

        System.out.println("" + dates[0].toString());
        System.out.println("" + sites[0].toString());
        System.out.println("" + issues[0].toString());

        update = (dates[0].toString() + "   " + sites[0].toString() + "   " +issues[0].toString());
于 2011-01-31T10:06:11.063 に答える
1

テーブルタグ自体を (ID などで) 直接取得できない場合は、そのテーブルだけに固有のものをより深く掘り下げることができます。たとえば、これがページ上の唯一のテーブルである場合、<td width="24%">program/site</td>XPath でそのセルを検索し、getParent() を使用して親<table>要素まで上に掘り下げることができます。

于 2011-01-27T17:46:18.933 に答える