2011-04-09 2 views
2

단순한 HTML DOM 파서가 HTML 파서에 대한 나쁜 선택임을 많은 사람들이 알고 있다고 생각합니다. 아직도 나는 그것을 지금 사용해야한다.하나의 요소 당 두 개 이상의 속성으로 간단한 html dom 파서를 사용하여 부품 찾기

한 요소 당 두 개 이상의 속성으로 검색하는 방법이 설명 된 기사를 읽었습니다. 그들은 그런 일 및 배열

foreach (tag[attr1=value] as tag1) 
{ 
    foreach (tag[attr2=value] as tag2) 
    { 
     // print tag2[attr1=value,attr2=value] 
    } 
} 

내 질문은 두 가지 속성에 의해 부분을 찾기위한 네이티브있는 posibility에 관한 필터링 하나의 가능성을 제시했다. 매뉴얼에서 찾지는 못했지만 모든 것이 매뉴얼에있는 것은 아닙니다.

누구나 알고있는 방법이 있습니까? tag2[attr1=value,attr2=value] 또는 tag2[attr1=value attr2=value] 등입니까?

답변

1

을 시도했다. 이 스크립트의 작성자 또는이 프로젝트의 개발을 계속하고자하는 다른 개발자가 편집해야합니다. 라이센스로 허용되는지 여부는 알 수 없습니다.

0

이전에는 간단한 HTML DOM 파서를 사용하지 않았습니다. 그러나 홈페이지는 jQuery를 방식으로 작동합니다, 그래서 그 순간에 그렇게 할 수있는 방법이 없다시피 tag[attr1=value][attr2=value] (jQuery: Multiple Attribute Selector)

+0

시도해보십시오. 아니. 내가 모든 것을 올바르게했다면 효과가 없다. – Eugene

1
$doc  = new DOMDocument(); 
@$doc->loadHTML($html); 
$xpath = new DOMXpath($doc); 
$elements = $xpath->query("//*/div[@class='name'][@id='someId']"); 

if ($elements->length > 0) 
{ 
    foreach ($elements as $index => $node) 
    { 
     //get node detail here 
    } 
} 
+0

네, DOMDOcument 기능에 대한 좋은 예입니다.하지만 주제에는 특별히 간단한 HTML DOM 파서가 필요합니다. 100 % 가능하지 않다면 나는 100 % %의 knowladge와 그것을 말할 누군가가 필요합니다. – Eugene

+0

당신은 그것을 100 % 퍼센트로 분석 할 수 없습니다. HTML 형식에 따라 달라집니다. HTML과 HTML의 차이점을 보여줍니다. 또한 예를 들어 실수로이 $ xpath-> query ("// */div [@ class = 'name'] [@ id = 'someId'] [class = 'SomeClassName']" – Mustafa

+0

DOMDocument에 대해 이야기하고 있습니다.이 질문은 ** Simple HTML DOM parser ** -> http://simplehtmldom.sourceforge.net/입니다. – Eugene

0

simple_html_dom을 살펴 보았다면 찾고있는 기능을 구현하기 위해 중첩 된 foreach 루프 이외의 방법은 없습니다. tag[attr=val][attr2=val]

또한 각 선택기는 반환 된 노드에 추가하기 만하면되므로 멀리 떨어져서 가지 않으므로 비슷한 기능을 모방 한 작업으로 시도한 tag.class[attr=val] or tag#id[attr=val]과 같이 처리 할 수 ​​있습니다.

마찬가지로, $html->find("div[attr=val]")->find("div[attr2=val2]")을 시도했지만 Simple HTML DOM은 새 트리 객체가 아닌 체인 배열을 반환하기 때문에 실패했습니다.

가장 좋은 방법은 질문에 게시 한 방식입니다.

관련 문제