0

サーバーへの呼び出しが1回だけ行われるように、同じクエリで株価とタイムスタンプを取得しようとしていました

select * 
from html 
where url="http://getquote.icicidirect.com/NewSiteTrading/trading/equity  
 /includes/trading_stock_quote.asp?Symbol=BSES" 
and (
xpath='//table[@class="projection"][2]//tr[td/p/text()="LAST TRADE PRICE"]/td[2]/p/text() 
| //table[@class="projection"][2]//tr[td/p/text()="LAST TRADED TIME"]/td[5]/p/text()'

次の結果が得られます

<results>385.6515:47:38</results>

ただし、これらの結果をタグで区切られるようにしたかったのです。

<results>
 <price>385.65</price>
 <timestamp>15:47:38<timestamp>
</results> 

これらの定数を含める方法はありますか?

4

1 に答える 1

1

XPath を使用して単純に新しいノードを作成することはできませんが、テキスト コンテンツではなくノードを返すように変更することはできます。

現在、XPath はtext()最後に使用して、テーブル セル内のテキスト コンテンツのみを取得します。pクエリを少し変更することで、これを調整してノードを返すことができます。

xpath='//table[@class="projection"][2]//tr[td/p/text()="LAST TRADE PRICE"]/td[2]/p | //table[@class="projection"][2]//tr[td/p/text()="LAST TRADED TIME"]/td[5]/p'

pこれにより、クエリごとに 2 つのノードが返され、結果の目的の処理に役立つ場合があります。

(ちなみに、URL を確認したところp、最下位レベルにノードがなかったため、クエリは結果を返しませんでした。ページの現在の HTML にp期待する要素がまだ含まれているかどうかを確認する必要があります。)

さらに、次のように、固定数フィルターを使用する代わりに、XPath-Axis-Operations を使用して目的の結果に移動すると便利な場合があります。

xpath='//td[p/text()="LAST TRADE PRICE"]/following-sibling::td[2]/p | //td[p/text()="LAST TRADED TIME"]/preceding-sibling::td[1]/p'

sibling-axis をフィルタリングすることで、現在の結果に関連するノードにジャンプできるため、この例では、ノードを見つけてLAST TRADE PRICE td2 番目の次の兄弟tdノードに移動します。

2 番目の部分tdは、コンテンツを含むノードに移動し、先行する兄弟をLAST TRADED TIMEピックアップします。td

XPath-Axis を使用すると、返される Web ページにさらに行がある場合でも正しい結果が得られます。これは、テーブルが動的である場合に便利です。

于 2013-07-12T16:48:22.187 に答える