2012-06-22 2 views
0

주로 테이블 기반 웹 사이트를 고치고 있습니다. 각 카테고리에 대해 <tr> 태그가 있고이 카테고리의 속성을 나타내는 태그가 <td> 개 있습니다.PHP의 XPath 다차원 배열

나는 <tr> 벌금을 얻을 수 있지만 XPath는을 사용하여 하나의 문자열로 오므 그 안에 모든 <td> 정보와 :

$html_string = file_get_contents('testpage.html'); 
$dom = new DOMDocument(); 
$dom->loadHTML($html_string); 
$xpath = new DOMXpath($dom); 
$context_nodes = $xpath->query('//table[@id="category"]/tr[not(starts-with(@id, "category"))]'); 

그리고 각 <td> 벌금을 얻을 수 있지만 함께 카테고리없이 회고 참조 :

$context_nodes = $xpath->query('//table[@id="category"]/tr[not(starts-with(@id, "category"))]/td'); 

내가 나중에하고 싶은 것은 각 카테고리의 속성을 참조 할 수 있습니다. 나는 $ context_nodes [2] 등으로 그렇게 할 수 있다고 생각했다. 생성 된 배열은 다차원 문자열 배열이었다고 생각했다. 이것은 사실이 아닌 것 같습니다.

xpath 정보에서 배열을 만드는 방법은 어디에서 구체적으로 원하는 범주를 기반으로 범주 속성을 가져올 수 있습니다. 예 : 기차 [1] [2]?

답변

1

두 번째 시도는 올바른 행에 있습니다. PHP (또는 libxml)는 선택한 노드가 반환 된 컨텍스트에 대한 참조를 유지하므로 사용자가 필요로하는 것을 정확히 수행 할 수 있습니다.

XML

<root> 
    <cat name="category 1"> 
     <prop>prop 1.1</prop> 
     <prop>prop 1.2</prop> 
    </cat> 
    <cat name="category 2"> 
     <prop>prop 2.1</prop> 
     <prop>prop 2.2</prop> 
    </cat> 
</root> 

PHP 우리는 상위 범주를 참조하려면 prop 노드의 관점에서 다시 나무 위로 이동 방법

$xml = new SimpleXMLElement($xml); 
$props = $xml->xpath('cat/prop'); 
foreach($props as $prop) { 
    //let's go back up... 
    $parent_cat = $prop->xpath('parent::*/@name'); 
    echo '<p>'.$prop.' (property of '.$parent_cat[0].')</p>'; 
} 

알 수 있습니다. 이것이 당신이 의미하는 바가 아니라면 도움이되기를 바랍니다.

+0

아, 정말 고마워. 훨씬 더 긴 방법을 사용하여이 문제를 해결 했으므로 더 간단한 메서드가 내장되어 있다는 것을 알게되었습니다. 감사합니다! – biscuitstack