메뉴 건너뛰기

app

[PHP] xpath 활용하기

박영식2010.09.29 01:43조회 수 4489댓글 0

    • 글자 크기
$dom = new DOMDocument(); 
$dom->load('파일경로');
$xpath = new DOMXPath($dom);
$query = 'ns:userquery';
$xpath->registerNamespace("ns", "naver:openapi");
$emps = $xpath->query($query);

        foreach ($emps as $emp) {
                print $emp->nodeValue;
        }

아래와 같은 xml일 경우 위와 같이 코딩해 사용한다.
namespace가 없을 경우엔, 아래와 같이 query변수를 지정하고, $xpath->registerNamespace("ns", "naver:openapi");는 사용하지 않는다. 하위노드일 경우에도 무조건 ns를 붙여야 한다. (cf. ns:item/ns:point/ns:x)

foreach를 사용하지 않으려면,
$result = $xpath->query($query)->nodeValue;
등으로 값을 얻을 수 있으며, rss의 item처럼 동일 이름의 다중 노드들이 존재하면
$query="/rss/channel/item/title";
$result = $xpath->query($query)->item(n)->nodeValue;
으로, n에 순서를 지정해 값을 얻을 수 있다.

$query = '//geocode/userquery';


<?xml version="1.0" encoding="utf-8" ?>
<geocode xmlns="naver:openapi">
<userquery>
<![CDATA[ 경기도성남시정자1동25-1 ]]>
</userquery>
<total>1</total>
<item>
<point>
<x>321060.0</x>
<y>529720.0</y>
</point>
<address>경기도 성남시 분당구 정자1동 25-1</address>
<addrdetail>
<sido>
<![CDATA[ 경기도 ]]>
<sigugun>
<![CDATA[ 성남시 분당구 ]]>
<dongmyun>
<![CDATA[ 정자1동 ]]>
<rest>
<![CDATA[ 25-1 ]]>
</rest>
</dongmyun>
</sigugun>
</sido>
</addrdetail>
</item>
</geocode>
박영식 (비회원)
    • 글자 크기

댓글 달기

박영식
2006.09.01 조회 1412
lispro06
2015.05.15 조회 1453
lispro06
2015.05.15 조회 1467
lispro06
2015.11.20 조회 1471
lispro06
2013.12.11 조회 1484
suritam9
2013.11.26 조회 1490
lispro06
2016.11.02 조회 1566
lispro06
2014.08.16 조회 1568
lispro06
2017.07.16 조회 1593
이전 1 2 3 4 5 6 7 8 9 10... 14다음
첨부 (0)
위로