2012-05-09 3 views
0

에 따라, 나는 쉽게 ID, 자식 1의 값을 얻을 수 있습니다, 다음 test.xml의 PHP와 XPath는, 필터링 결과 greatgrandchildren

<root> 
    <parent> 
     <ID>1</ID> 
     <child1>Value1</child1> 
     <child2>value11</child2> 
     <child3> 
      <grandchild> 
        <greatgrandchild>value1111</greatgrandchild> 
      </grandchild> 
     </child3> 
    </parent> 
    <parent> 
     <ID>2</ID> 
     <child1>value2</child1> 
     <child3> 
      <grandchild> 
        <greatgrandchild>value2222</greatgrandchild> 
      </grandchild> 
     </child3> 
    </parent> 
    <parent> 
     <ID>3</ID> 
     <child1>value3</child1> 
     <child2>value33</child2> 
     <child3> 
      <grandchild> 
        <greatgrandchild>value3333</greatgrandchild> 
      </grandchild> 
     </child3> 
    </parent> 
    <parent> 
     <ID>4</ID> 
     <child1>value4</child1> 
     <child2>value44</child2> 
     <child3> 
      <grandchild> 
        <greatgrandchild>value4444</greatgrandchild> 
      </grandchild> 
     </child3> 
     </parent> 
</root> 

나는 XPath는 '/ 루트/부모'에 대해 다음 사용

을 고려 및 child2.

그러나 저는 손주의 위대한 수령의 가치를 얻지 못했습니다.

이 값을 얻으려면 어떻게해야합니까?

$query = '/root/parent' 
$xQuery = $xml->xpath($query); 
foreach($xQuery as $results){ 
    echo $results->ID; 
    echo $results->child1; 
    echo $results->child2; 
    echo $results->greatgrandchild; 
} 

greatgrandchild 값을 기준으로 결과를 필터링하고 싶습니다. ID 및 child1 및 child2의 결과를 성공적으로 필터링 할 수 있습니다. 나는 greatgrandchild의 가치에 기초하여 부모와 그 자녀와 손주들, 그리고 모든 위대한 수련자를 얻고 싶습니다.

xpath를 사용하면 가능합니까?

질문의 문구를 수정하고 적절한 test.xml을 사용했습니다. 오류가 처음 발생했을 때.

+0

답변을 수락하십시오. –

답변

1

코드에서이 문제

  • grandchild 노드가 모호하고 형식이 잘못이 있습니다. grandchild2의 닫는 태그는 grandchild이며 잘못되었습니다.

    This is wrong------------+ 
             | 
             v 
    <grandchild2>value3333</grandchild> 
    
  • $results->grandchild 오히려 $results->child3->grandchild를 사용 존재하지 않습니다. 여기에 XPath는 그 child1=value3grandchild1=value333 사용이 쿼리를 모든 parent 요소를 찾으려면 SimpleXMLElement

root 노드 아래에있는 모든 parent 노드를 반환합니다.

/root/parent[child1 = "value3" and child3/grandchild = "value333"] 
+0

안녕하세요. 나는 내가 성취하고자하는 것을 더 쉽게 이해할 수 있도록이 XML을 만들었습니다. 이것은 내가 사용하고있는 xml 파일과 다릅니다. xml 형식의 오류를 편집했습니다. 나는 아직도 손주의 가치를 얻을 수 없다. – Marc

+0

제 대답의 두 번째 글 머리 부분을보십시오. 그게 당신이 필요합니다. –

+0

좋습니다. 한 가지 더 질문. 어떻게하면 greatgrandchild의 가치를 테스트하고 루프에 대해 동일한 값을 사용할 수 있습니까? 예를 들어 다음 xpath는 작동하지 않습니다./root/parent [greatgrandchild = value333]입니다. 나는 이것이 작동하지 않으며/root/parent/child3/grandchild [greatgrandchild = value333]의 줄에 더 많은 것을 넣어야한다는 것을 알고 있습니다. 그러나 나는 또한 자식 2의 값을 테스트하고 싶다. SQL 인 경우, 루트에서 부모를 선택한다. 여기서는 greatgrandchild = value333 및 child1 = value3이다. 그렇게 두 xpath 필터를 병합 할 수 있습니까? – Marc