2016-07-03 14 views
0
 <div id="footer"> 
      <div id="footertext"> 
       <p> 
        Copyright &copy; FUCHS Online Ltd, 2013. All Rights Reserved. 
       </p> 
      </div> 
     </div> 

「著作権© FUCHS Online Ltd、2013.すべての権利」という文字列を取得したいと考えています。 私のC#のコードです---HtmlAgilityPackで属性の値を取得する方法

public string getvalue() 
     { 
     HtmlWeb web = new HtmlWeb(); 
     HtmlAgilityPack.HtmlDocument doc = web.Load("www.fuchsonline.com"); 
     var link = doc.DocumentNode.SelectNodes("//div[@id='footertext']"); 
     return link.ToString(); 
     } 

が、それは "HtmlAgilityPack.HtmlNodeCollection" のようなものがここ

+0

取得したいテキストは属性ではなく、DOM内のテキストノードです。 html属性は、[Xml attributes](https://www.google.co.il/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwipwY-OjtfNAhXkNJoKHV-fC- wQFggkMAI&url = http%3A%2F%2Fwww.w3schools.com%2Fxml%2Fxml_attributes.asp&usg = AFQjCNG3z_8GA13PwLrj2SQRv2uLSbyCtg&sig2 = 8f2bj2MH369BcREluiGZkA)。 – Veverke

+0

@Veverkeは誤った情報を別のものに置き換えることは、おそらくそれほど良い考えではありません。 XMLはHTMLではなく、属性のルールは異なります(類似していますが)。 – spender

+0

@Spender:htmlはXMLのサブセットではありませんか?私は、XMLがすべての「タグ付き」データ構造化フォーマットの傘であると考えました。つまり、これらのタグ付き言語がすべて「拡張マークアップ言語」であれば、XMLからすべて「派生」すると考えました。 Extensible Markup Languageと私の一方的な関連性があり、XMLが間違っていると思われます(xmlは、拡張可能なマークアップ言語の実装インスタンスを表すXMLに対して、拡張可能なマークアップ言語の略語です)。 – Veverke

答えて

0

はあなたが何ができるかだ私をretuns:

string html = @" 
    <div id='footer'> 
     <div id='footertext'> 
      <p> 
       Copyright &copy; FUCHS Online Ltd, 2013. All Rights Reserved. 
      </p> 
     </div> 
    </div>"; 

//in my example I am not use HtmlWeb because I am working with the piece of html you provided. You will continue to you HtmlWeb and access the url... 
HtmlDocument htmlDoc = new HtmlDocument(); 
htmlDoc.LoadHtml(html); 

var texts = htmlDoc.DocumentNode.SelectNodes("//*[@id='footertext']").Select(n => n.InnerText.Trim()); 

foreach (var text in texts) 
{ 
    Console.WriteLine(text); 
} 

出力:

enter image description here

0
public string getvalue() 
{ 
    HtmlWeb web = new HtmlWeb(); 
    HtmlAgilityPack.HtmlDocument doc =web.Load("www.fuchsonline.com"); 
    var link = doc.DocumentNode.SelectNodes("//div[@id='footertext']"); 
    return link.InnerText.ToString(); 
} 
+0

しかし、htmlagilityパックにはInnerTextの定義が含まれていないと言われました – nayan

+0

InnerTextは、SelectSingleNode()のmetodを使用した場合にのみ機能します。 – nayan

+0

どうすればいいですか。link.Document.Body.InnerText –

1

1つのノードの値が必要です。したがって、SelectSingleNodeメソッドを使用する方が良いです。

HtmlWeb web = new HtmlWeb(); 
var doc = web.Load("http://www.fuchsonline.com"); 
var link = doc.DocumentNode.SelectSingleNode("//div[@id='footertext']/p"); 

string rawText = link.InnerText.Trim(); 
string decodedText = HttpUtility.HtmlDecode(text); // or WebUtility 

return decodedText; 

また、htmlエンティティ&copy;をデコードする必要があります。

+0

これは確かに選択された答えになるはずです。私たちはIDを扱っていることを忘れていましたが(サイトではdom全体で繰り返しIDを使用する開発者を「防ぐ」ことはできませんが、selectingleは望ましい結果を得られませんが、 – Veverke

関連する問題