2014-09-25 1 views
1

:PHP의 XPath - 누구의 아이 디스플레이 부모 나 스크립트에 다음 한

<?php 
    $xml = '<?xml version="1.0" encoding="UTF-8"?> 
      <root> 
       <category id="1" sort="00A125698" name="Kitchen"> 
        <good id="122"/> 
        <good id="315"/> 
        <good id="94"/> 
       </category> 
       <category id="2" sort="00B354565" name="Dining room"> 
        <good id="441"/> 
        <good id="122"/> 
        <good id="521"/> 
       </category> 
       <category id="3" sort="00A259875" name="Chairs"> 
        <good id="335"/> 
        <good id="225"/> 
       </category> 
      </root>'; 

    $data = simplexml_load_string($xml); 
    $cat_name = $data->xpath("/root/category[contains(@sort, '00A')] && /root/category/good[@id='122']"); 

    $cat_name_cnt = count($cat_name); 
    for($i = 0; $i <$cat_name_cnt; $i++){ 
     echo $cat_name[$i]->attributes()->name; 
     echo '<BR />'; 
    } 
?> 

가능한 경우 잘 모르겠지만, 내가 좋아하는 뭔가를 시도 : 어디 속성 정렬 카테고리의 이름을 표시 "00A"로 시작하고 그 아이의 ID는 122입니다. XPath의 첫 번째 부분은 옳다는 것을 알고 있지만, "자식은 누구"라는 부분을 어떻게 수행해야할지 모르겠습니다.

결과물은 주방이어야합니다.

정렬이 00A로 시작하는 모든 범주 이름을 표시 한 다음 상품 배열에 122가 들어있는 경우 PHP에서 테스트 할 수 있음을 알고 있습니다.하지만 가능한 경우 XPath에서 즉시 작성하는 것이 더 빠르다고 생각합니다.

감사합니다.

답변

1

네, 실제로 가능합니다. 사실 거의 다 왔어요. 예 :

$data = simplexml_load_string($xml); 
$cat_name = $data->xpath("/root/category[contains(@sort, '00A')][descendant::good[@id='122']]"); 
if(count($cat_name) > 0) { 
    $element = $cat_name[0]; 
    $name = (string) $element->attributes()->name; 
    echo $name; // kitchen 
}