2013-02-13 5 views
0

안녕하세요 저는이 유형의 XML을 정확하게 가지고 있습니다. 그리고 나는 PHP xpath를 사용하여 정보를 얻을 필요가있다. PHP 스크립트XML PHP, 노드, 하위 노드를 사용하는 Xpath

<row> 
<id>1</id> 
<product> 
    <prodRow> 
     <PID>Aa</PID> 
    </prodRow> 
    <prodRow> 
     <PID>Ab</PID> 
    </prodRow> 
</product> 
</row> 
<row> 
<id>2</id> 
<product> 
    <prodRow> 
     <PID>Ba</PID> 
    </prodRow> 
    <prodRow> 
     <PID>Bb</PID> 
    </prodRow> 
</product> 
</row> 
<row> 
<id>3</id> 
<product> 
    <prodRow> 
     <PID>Ca</PID> 
    </prodRow> 
    <prodRow> 
     <PID>Cb</PID> 
    </prodRow> 
</product> 
</row> 

:

if(file_exists("band.xml")) 
    { 
    $DOM = new DOMDocument(); 
     $DOM->load("band.xml"); 
    $xpath = new DOMXPath($DOM); 
    $row = $xpath->query("//row/id"); 
    $prodRowID = $xpath->query("//row/product/prodRow"); 

    foreach($row as $vID) 
    { 
    echo "<b>".$vID->nodeValue."</b><br /><br />"; 

    foreach($prodRowID as $pID) 
    { 
          $prodID = $pID->getElementsByTagName("PID"); 
      echo "<b>".$prodID->item(0)->nodeValue."</b><br /><br />"; 
    }  

    } 

     } 

내가 얻을 때마다 행에 도달 할 때, 그렇게하는 방법을 모르는 대답은의 PID는 모든 행에서 인쇄되어 같은 XML 보이는

1 
Aa, Ab, Ba, Bb, Ca, Cb 
2 
Aa, Ab, Ba, Bb, Ca, Cb 
3 
Aa, Ab, Ba, Bb, Ca, Cb 

내가 얻을 필요가 답 :

1 
Aa, Ab 
2 
Ba, Bb 
3 
Ca, Cb 

답변을 주셔서 감사합니다 이것은 내 두통이다, 어떻게 해야할지 모르겠다.

답변

1

당신은 첫 번째 foreach 내부 prodRow의를 선택해야 컨텍스트 노드를 표시, 그리고 절대 XPath를 사용

foreach($row as $vID) 
{ 
    echo "<b>".$vID->nodeValue."</b><br /><br />"; 

    $prodRowID = $xpath->query("../product/prodRow", $vID); 
    foreach($prodRowID as $pID) 
    { 
     echo "LIGA <b>".$pID->nodeValue."</b><br /><br />"; 
    }  
} 
+0

도움을 주신 덕분에 두 답변이 모두 맞았습니다. 당신은 최고입니다. 당신은 지금까지 JLRishe를 많이 도왔습니다. – ArnasGo

0

귀하의 내부 foreach 항상 어떤 방식으로 참조하지 않기 때문에 동일하지 바깥쪽으로 foreach. 당신이하고 싶은 일은 모든 //row 노드를 반복하는 것입니다. 의 컨텍스트 매개 변수를 사용하여에서 id을 쿼리하십시오.

+0

감사합니다. 나는 이것을 염두에 두겠습니다. 여러분은 이것에 대해 옳았습니다. 나는 항상 행 노드를 참조합니다. JLRishe는 어떻게하지 않는지 아래에 보여주었습니다. 둘 다 고마워. 건배! – ArnasGo