2012-03-08 14 views
1

異なるWebサイトからPDFリンクのリストを取得しようとしています。まず、Webクライアントクラスを使用してページソースをダウンロードしています。次に、sgmlReaderを使用してHTMLをXMLに変換します。私は「PDFファイル」を含むすべてのリンクを取得する必要がありXML:C#を使用して特定のテキストの要素を検索する

<p><a href="pub/1985_to_1997_Board_Action_Summary.pdf">1985 to 1997 Board Action Summary</a></p> 

:だから、ある特定のサイトのために、私はこのようになりますタグを取得します。明らかに、すべてのウェブサイトが同じように配置されているわけではないので、<p>タグを検索するだけで十分な動的性はありません。私はむしろlinqを使用しないだろうが、もし私がする必要があります。前もって感謝します。

答えて

3

LINQのは...これが容易になり

var hrefs = doc.Root.Descendants("a") 
    .Where(a => a.Attrib("href").Value.ToUpper().EndsWith(".PDF")) 
    .Select(a => a.Attrib("href")); 

離れてあなたが行きます! (注:あなたがややそれを修正する必要がある場合がありますので、メモリからこれをしなかった)

これはhref(アンカー)を持っていませんが、あなたは確かにそれを修正することができ<a/>タグ...

+0

XMLDocumentクラスには「ルート」メソッドがありません。別のクラスを使用する必要がありますか? – broke

+0

はい、私はXDocumentを参照しています。私が正しく覚えていれば、XmlDocumentインスタンスからXDocumentを作成することができます。 –

+0

"a"が小文字になると、これはかなり効果的です。それは首都の "A"しかしそれは壊れます。 – broke

1
のためにブレークダウンします

ここに2つのオプションがあると思います。リンクだけが必要な場合は、正規表現を使用して、.pdfで終わる文字列の一致を見つけることができます。 XML構造体を操作したり、XMLから他の値を取得する必要がある場合は、XmlDocumentを使用してXPathクエリを使用して、その中にPDFファイルへのリンクを持つノードを見つける方がよいでしょう。 LINQ to XMLを使用すると、書かなければならないコードの行数を減らすことができます。

関連する問題