2013-10-28 4 views
0

성능 때문에 C#으로 PHP 스크립트를 구문 분석하고 있습니다. 난 데문자열을 통해 HTML 태그를 반복합니다.

$dom = new DOMDocument; 
$dom->loadHTML($message); 
foreach ($dom->getElementsByTagName('a') as $node) { 
    if ($node->hasAttribute('href')) { 
     $link = $node->getAttribute('href'); 
     if ((strpos($link, 'http://') === 0) || (strpos($link, 'https://') === 0)) { 
      $add_key = ((strpos($link, '{key}') !== false) || (strpos($link, '%7Bkey%7D') !== false)); 
      $node->setAttribute('href', $url . 'index.php?route=ne/track/click&link=' . urlencode(base64_encode($link)) . '&uid={uid}&language=' . $data['language_code'] . ($add_key ? '&key={key}' : '')); 
     } 
    } 
} 

문제는 getElementByTagName 일부입니다

내가에 문제가있어 PHP 소스입니다.

here으로 말하면 htmlagilitypack을 사용해야합니까? 내 코드는 지금까지 있습니다 :

var doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(leMessage); 

leMessage이 HTML을 유지하는 문자열입니다. 여태까지는 그런대로 잘됐다. 문제는 HtmlAgillityPack에 getElementsByTag 함수가 없다는 것입니다. 그리고 정상적인 HtmlDocument (팩없이)에서, 나는 html 페이지의 오른쪽 문자열을 사용할 수 없습니까?

아무도 내가이 일을하기 위해 무엇을해야하는지 안다? 내가 생각할 수있는 것은 윈도우 폼에서 웹 브라우저를 만들고 문서 내용을 leMessage으로 설정 한 다음 거기에서 파싱하는 것입니다. 하지만 개인적으로 나는 그 해결책을 좋아하지 않는다 ... 그러나 다른 방법이 없다면 ...

답변

1

다음은 내가 당신의 링크를 따라 갔을 때 가장 먼저 나타난 코드 블록이다 '예시'를 클릭하십시오.

HtmlDocument doc = new HtmlDocument(); 
doc.Load("file.htm"); 
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"]) 
{ 
    HtmlAttribute att = link["href"]; 
    // DO SOMETHING WITH THE LINK HERE 
} 
doc.Save("file.htm"); 

장래에 인터넷 검색을 수행해주세요.

+0

와우, 나는 그것을 보지 못했습니다. 정말 미안해. 그러나 어쨌든 시간을내어 말해 주셔서 감사합니다. D – Mathlight