2011-09-02 4 views
0

예 :PHP XML : 형제별로 NodeValue를 얻는 방법? 는 XML의

<books> 
    <book> 
    <title>Hip Hop Hippo</title> 
    <released>31-12-9999</released> 
    </book> 
    <book> 
    <title>Bee In A Jar</title> 
    <released>01-01-0001</released> 
    </book> 
</books> 

내가 책 제목의 출시 날짜를 반환하는 함수를 만들고 싶어. 예 : 'Hip Hop Hippo'서적을 발표하고 싶습니다.

simplexml을 사용하고 ->book[0]->released을 쓸 수 있음을 알고 있습니다. 그러나 그것은 정적 XML이있을 때만 작동하며 'Hip Hop Hippo'와 일치하는 ->book[$i]->title의 위치를 ​​알고 있습니다. 그러나 동적 인 경우는 아닙니다. API 공급자가 제공 한 것이므로 모든 변경 사항을 예측할 수는 없습니다. book[1], book[2] 등이 될 수 있습니다.

내 기능에는 무엇을 써야합니까?

답변

3

체크 아웃 XPath 함수 http://php.net/manual/en/simplexmlelement.xpath.php

당신은 다음과 같은 쿼리를 작성 할 수 있습니다 : /책/책 [제목 = "힙합 하마"]

$string = <<<XML 
<books> 
    <book> 
    <title>Hip Hop Hippo</title> 
    <released>31-12-9999</released> 
    </book> 
    <book> 
    <title>Hip Hop Hippo</title> 
    <released>31-12-2000</released> 
    </book> 
    <book> 
    <title>Bee In A Jar</title> 
    <released>01-01-0001</released> 
    </book> 
</books> 
XML; 

$xml = new SimpleXMLElement($string); 

$result = $xml->xpath('/books/book[title="Hip Hop Hippo"]'); 

foreach($result as $key=>$node) 
{ 
    echo '<li>'; 
    echo $node->title . '/' . $node->released; 
    echo '</li>'; 
} 
+0

감사합니다! 나는 그 기능을 들었다. 그러나 PHP 매뉴얼에서'@ ','.' 등과 같이 대괄호 안에 사용할 수있는 연산자에 대해서는 설명하지 않습니다. 설명을 설명하거나 링크 할 수 있습니까? –

+0

@는 속성 값을 나타냅니다. 는 현재 컨텍스트를 나타내며 "../"는 XML 트리를 다시 재귀 적으로 사용하는 데 사용될 수 있습니다. 예 : //title[../released= ""], double fowrad 슬래시는 XML 트리에서 단일 시작 슬래시가 루트 – Scuzzy

+0

http://www.w3schools.com/xpath/xpath_syntax.asp – Scuzzy