'XML'에 해당되는 글 4건

  1. 2013.07.22 PHP AJAX XML 연동
  2. 2013.07.17 PHP SimpleXML 구문
  3. 2013.07.16 PHP XML DOM 구문
  4. 2013.07.15 PHP XML(DOM,SAX) 파싱 구문

 

이번장에서는 PHP AJAX XML 연동에 대해서 알아보겠습니다.  

 

PHP 구문에 AJAX를 이용해서 XML 데이터를 불러들이는 방식입니다. 이전 포스팅에서는  DB를 불러들이는 방식이었는데  DB 대신 XML 데이터를 가지고 온다고 생각하면 되겠습니다.

 

예제를 보면서 설명드리겠습니다. html 파일 1, ajax 파일 1, xml 파일 1 이렇게 총 3개의 파일이 필요합니다.

 

관련예제

HTML 파일

------ html.php ------

<html>
 <head>
 <script>
 function showNAME(str)
 {
 if (str=="")
   {
   document.getElementById("txtHint").innerHTML="";
   return;
   }
 if (window.XMLHttpRequest)
   {
 

   // code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   }
 else
   {
 

   // code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
     document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
     }
   }
 xmlhttp.open("GET","ajax_php.php?q="+str,true);
 xmlhttp.send();
 }
 </script>
 </head>
 <body>
 

 <form>
 Select a CD:
 <select name="cds" onchange="showNAME(this.value)">
 <option value="">Select NAME : </option>
 <option value="Lee Bo Young">Lee Bo Young</option>
 <option value="Um Ji Won">Um Ji Won</option>
 <option value="Lee Min Jeong">Lee Min Jeong</option>
 <option value="O Ji Eun">O Ji Eun</option>
 <option value="Su Ji">Su Ji</option>
 <option value="I U">I U</option>
 </select>
 </form>
<div id="txtHint"><b>Name info will be listed here...</b></div>

 </body>
 </html>

// 이름을 선택하면 이름에 대한 정보가 나옵니다.

 

AJAX 파일

------ ajax.php ------

<?php
 $q=$_GET["q"];

 $xmlDoc = new DOMDocument();
 $xmlDoc->load("xml.xml");

 $x=$xmlDoc->getElementsByTagName('ARTIST');

 for ($i=0; $i<=$x->length-1; $i++) {
 if ($x->item($i)->nodeType==1)   {
   if ($x->item($i)->childNodes->item(0)->nodeValue == $q) {
     $y=($x->item($i)->parentNode);
     }
   }
 }
 

 

 $cd=($y->childNodes);

 for ($i=0;$i<$cd->length;$i++) { 
 if ($cd->item($i)->nodeType==1)  {
   echo("<b>" . $cd->item($i)->nodeName . ":</b> ");
   echo($cd->item($i)->childNodes->item(0)->nodeValue);
   echo("<br>");
   }
 }
 ?>

//xml.xml 파일을 불러들여서 선택된 $q 값과 xml의 값을 비교하여 같은 정보를 가져옵니다.

 

XML 파일

------ ajax_php.xml ------

<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- Edited by XMLSpy® -->
<CATALOG>
 <CD>
  <JOB>Telent</JOB>
  <ARTIST>Lee Bo Young</ARTIST>
  <HOMETOWN>In Cheon</HOMETOWN>
  <BODY>168cm, 48kg</BODY>
  <BIRTH>1979. 1. 12</BIRTH>
 </CD>
 <CD>
  <JOB>Telent</JOB>
  <ARTIST>Um Ji Won</ARTIST>
  <HOMETOWN>DaeGu</HOMETOWN>
  <BODY>170cm, 48kg</BODY>
  <BIRTH>1977. 12. 25</BIRTH>
 </CD>
 <CD>
  <JOB>Telent</JOB>
  <ARTIST>Lee Min Jeong</ARTIST>
  <HOMETOWN>Seoul</HOMETOWN>
  <BODY>167cm, 49kg</BODY>
  <BIRTH>1982. 2. 16</BIRTH>
 </CD>
 <CD>
  <JOB>Telent</JOB>
  <ARTIST>O Ji Eun</ARTIST>
  <HOMETOWN>Seoul</HOMETOWN>
  <BODY>165cm</BODY>
  <BIRTH>1990</BIRTH>
 </CD>
 <CD>
  <JOB>Singer</JOB>
  <ARTIST>Su Ji</ARTIST>
  <HOMETOWN>GwangJu</HOMETOWN>
  <BODY>168cm, 47kg</BODY>
  <BIRTH>1994. 10. 10</BIRTH>
 </CD>
 <CD>
  <JOB>Singer</JOB>
  <ARTIST>I U</ARTIST>
  <HOMETOWN>Seoul</HOMETOWN>
  <BODY>161.8cm, 44kg</BODY>
  <BIRTH>1993. 5. 16</BIRTH>
 </CD>
</CATALOG>

// 여자연예인 XML 정보입니다. 이렇게 하면 더 쉽게 다가오지 않을까 해서 일부러 여자 연예인을 예로 들어봤습니다.

 

위 3개의 파일이 연동되어 실시간 XML 파일의 정보를 가져옵니다.

 

 

 

 

예제를 직접 코딩해보고 응용을 해보기 바랍니다. 개발자는 계속적인 학습이 없으면 언제든지 도태될 수 있습니다.

 

혹시 오타 또는 오류 발견시 댓글, 쪽지 주시면 바로 수정해놓겠습니다.

 

 

'PHP > PHP and AJAX' 카테고리의 다른 글

PHP AJAX RSS Reader 구문  (0) 2013.07.24
PHP AJAX Live Search 구문  (0) 2013.07.23
PHP AJAX XML 연동  (0) 2013.07.22
PHP AJAX 데이터베이스 연동  (9) 2013.07.19
PHP AJAX 구문  (0) 2013.07.18
Posted by 진격의 파파

댓글을 달아 주세요

 

 

이번장에서는 PHP SimpleXML 에 대해서 포스팅 하겠습니다. 

 

SimpleXML 는 PHP5의 새로운 기능입니다.

 

SimpleXML 라는 이름에서 알수 있듯이 XML 요소의 이름과 텍스트를 얻는 가장 간단한 방법입니다.

 

설치라던지 인스톨 작업은 별도로 없고 PHP 5.0 이상이라면 사용가능합니다.

 

우선 간단한 예제를 살펴보겠습니다.

 

------ test.xml ------

<?xml version="1.0" encoding="utf-8"?>
<note>
<to>Park</to>
<from>Kim</from>
<heading> header contents !! </heading>
<body> Body contents !! </body>
</note>

// 위와 같은 xml 파일이 있다고 가정하고(아래 xml.php 와 같은 위치(폴더)에 있어야 함)

 

------ xml.php ------

<?php
 $xml=simplexml_load_file("test.xml");
 print_r($xml);
?>

// 위 xml.php 파일을 실행시켜보면

SimpleXMLElement Object ( [to] => Park [from] => Kim [heading] => header contents !! [body] => Body contents !! )

처럼 출력됩니다. 한줄로 길게나와 보기가 조금 그렇습니다. 그래서 해당 내용만 나오게 변경해보겠습니다.

 

------ xml2.php ------

<?php
 $xml=simplexml_load_file("test.xml");
 echo $xml->to . "<br>";
 echo $xml->from . "<br>";
 echo $xml->heading . "<br>";
 echo $xml->body;
?>

// 출력되는 내용은 아래와 같습니다.

Park
Kim
header contents !!
Body contents !!

 

 

다음 예제는 출력요소의 이름과 그에 해당하는 내용을 같이 보여주는 예제 입니다.

------ xml3.php ------

<?php
 $xml=simplexml_load_file("test.xml");
 echo $xml->getName() . "<br>";

 foreach($xml->children() as $child){
  echo $child->getName() . ": " . $child . "<br>";
 }
?>

// 출력되는 내용은 아래와 같습니다.

note
to: Park
from: Kim
heading: header contents !!
body: Body contents !!

 

사실 예제는 무수히 많이 있는데 일단 간단하고 기본적인 예제를 살펴본 것이라서 아마도 더 많은 예제를 찾아보고 학습해야 자기것으로 만들수 있지 않을까 생각합니다.

 

오타 또는 오류가 발견되면 댓글 또는 쪽지 부탁드립니다. 일단 여기까지해서 XML 관련 포스팅은 마치고, 다음 포스팅에선 PHP 와 AJAX의 연동에 대해서 알아보겠습니다.

'PHP > PHP XML' 카테고리의 다른 글

PHP SimpleXML 구문  (0) 2013.07.17
PHP XML DOM 구문  (0) 2013.07.16
PHP XML(DOM,SAX) 파싱 구문  (0) 2013.07.15
Posted by 진격의 파파

댓글을 달아 주세요

PHP XML DOM 구문

PHP/PHP XML 2013. 7. 16. 11:14

 

이번장에서는 PHP XML DOM 파싱에 관하여 예제를 보며 포스팅하겠습니다.  

이전 포스팅에서 DOM 과 SAX 파싱에 대해서 간략 설명하였습니다.  이번장을 보기전에 우선 이전 포스팅을 본다면 더 도움이 될듯합니다.

 

DOM 은 Document Object Model 의 약자입니다.

DOM 방식은 트리 구조로 XML 문서를 변환하고 전체 문서를 읽어서 엑세스 하기때문에 메모리를 많이 사용하며 조금 무겁다고 느낄수 있습니다.

- 문서 구조 정보와 컨텐츠를 객체로 이용

- 트리에 기반한 객체를 이용함으로써 XML 문서의 구조적 변경 작업에 적합

- XML 문서를 메모리상에서 공유할수 있다는 장점이 있음

- 메모리상에 구체적인 객체 트리를 생성함

- XML 문서를 다루기 위한 복잡한 응용프로그램(브라우저, 편집기)에 적합

- 메모리 사용량이 큼

// 위 내용은 이전 포스팅에서 설명된 내용을 가져온것입니다.
DOM 의 XML 파싱은 PHP의 부분이기 때문에 어떤 특정한 파일을 설치할 필요가 없습니다.
관련예제
----- test.xml ----- (우선 test.xml 파일을 아래와 같이 생성합니다)
<?xml version="1.0" encoding="euc-kr"?>
<note>
<to>철수</to>
<from>영희</from>
<heading>헤더 부분</heading>
<body>이곳은 내용이 들어가는 부분!</body>
</note>
----- xml.php ----- (xml.php 파일을 아래와 같이 생성합니다)
<?php
 $xmlDoc = new DOMDocument(); // 새로운 객체를 생성함
 $xmlDoc->load("test.xml"); // test.xml 파일을 불러들임
 print $xmlDoc->saveXML(); // DOM Tree를 xml 문서로 변환함
 ?>
// 객체를 선언하고 xml 파일을 불러들인후 내용을 출력하는 구문입니다. 출력되는 내용은
철수 <from>영희</from> <heading>헤더 부분</heading> 이곳은 내용이 들어가는 부분!
입니다.
관련예제 2
----- test.xml -----
<?xml version="1.0" encoding="utf-8"?>
<note>
<to>Park</to>
<from>Kim</from>
<heading> header contents !! </heading>
<body> Body contents !! </body>
</note>
// XML은 utf-8을 사용하는 것이  기본 권고사항 입니다.
----- xml.php -----
<?php
 $xmlDoc = new DOMDocument();
 $xmlDoc->load("test.xml");
 $x = $xmlDoc->documentElement; // 문서의 루트 요소를 가져옴
 foreach ($x->childNodes AS $item) {
  print $item->nodeName . " = " . $item->nodeValue . "<br>";
 }
?>
// documentElement 는 그 트리의 탑-레벨입니다. 이 요소는 하나 또는 그 이상의 자식 노드(childNodes)를 가진다. 이 자식 노드는 그 트리의 가지로 보면 됩니다.

노드 인퍼페이스(Node Interface)는 XML 노드 트리의 각 요소를 읽고 쓰기 위해 사용되며, 각각의 노드를 접근하기 위해 documentElement의 childNodes 속성을 접근할 수 있습니다. 

 

// 출력문은 아래와 같습니다.
#text =
to = Park
#text =
from = Kim
#text =
heading = header contents !!
#text =
body = Body contents !!
#text =
 
// XML 에 해당하는 모든 요소를 출력합니다.
DOMDocument 클래스의 매소드
loadXML() - XML 문서를 불러온다.
saveXML() - 메모리에 올라가 있는 DOM Tree를 XML문서로 변환한다.
load() - 파일로 부터 XML문서를 불러온다.
save() - DOM Tree를 파일로 저장한다.
vaildate() - DTD를 기준으로 XML문서의 유효성을 검증한다.
schemaVaildate() - XML 스키마를 기준으로 XML 문서의 유효성을 검증한다.
schemaVaildateSource() - XML 스키마를 기준으로 XML 문서의 유효성을 검증한다.
createELement() - 새로운 앨리먼트 노드 생성
createTextNode() - 새로운 텍스트 노드 생성
createAttribute() - 새로운 속성 노드 생성
createElementNS() - 네임스페이스 영역을 갖는 앨리먼트 노드 생성
createAttributeNS() - 네임스케이스 영역을 갖는 속성 노드 생성
createComment() - 새로운 주석노드 생성
createCDATASection() - 새로운 CDATA섹션 노드를 생성한다.
getElementsByTagName() - 지정한 태그명을 갖는 앨리먼트의 노드 리스트 출력
getElementsByTagNameNS() - 특정한 네임스페이스 영역에서 지정한 태그명을 갖는 앨리먼트의 노드 리스트를 반환한다.
importNode - XML 문서에 붙일 특정노드를 가져온다.
여기까지 XML DOM 구문에 대한 설명이었으며 다음장에서는 XML SAX 구문에 대해서 알아보겠습니다. 사실 XML에 관련된 설명이 많이 부족할 수 있습니다. 제가 코딩하면서 자주 사용하지 않았기 때문이 아닐까 합니다. 설명중 오타 또는 오류가 발생되면 댓글, 쪽지 주시면 바로 수정해 놓겠습니다.

'PHP > PHP XML' 카테고리의 다른 글

PHP SimpleXML 구문  (0) 2013.07.17
PHP XML DOM 구문  (0) 2013.07.16
PHP XML(DOM,SAX) 파싱 구문  (0) 2013.07.15
Posted by 진격의 파파

댓글을 달아 주세요

 

 

이번장에서는 PHP XML 파싱에 대해서 알아볼텐데요. 사실 제가 프로그램 생활을 하면서 xml 파싱은 정말 자신없는 부분이기도 합니다.  그래서 설명하기 어렵겠지만 저도 공부할겸 인터넷에 있는자료 뒤적뒤적 해가며 적어보겠습니다. 

 

XML 은 문서를 읽어 문서 내용 및 구조에 대한 접근을 제공하는 소프트웨어입니다.

- 엘리먼트, 속성, 엔티티 정보를 생성

- 문서의 정확성을 검증

- XML 문서 처리를 수행하도록 지원함

 

XML 문서를 처리하기 위한 대표적인 방식은 SAX(Simple Api for Xml) 파싱과 DOM(Document Object Model) 파싱 두 가지가 있습니다.

 

SAX 방식은 이벤트가 발생할때마다 그때그때 처리되기 때문에 메모리 소모가 적지만 잦은 이벤트의 발생은 오히려 더 메모리를 많이 잡아먹을수 있습니다.

-  문서 전체 구조 정보를 가지지 않음

- XML 문서를 읽어 나가면서 이벤트 발생

- 특정 엘리먼트에 대한 이벤트 발생시 처리

- 문서의 부분을 처리할때 유리

- 데이터 구조 조작에 유리

- 응용프로그램을 최적화 가능

- 효율성이 좋음

 

 

DOM 방식은 트리 구조로 XML 문서를 변환하고 전체 문서를 읽어서 엑세스 하기때문에 메모리를 많이 사용하며 조금 무겁다고 느낄수 있습니다.

- 문서 구조 정보와 컨텐츠를 객체로 이용

- 트리에 기반한 객체를 이용함으로써 XML 문서의 구조적 변경 작업에 적합

- XML 문서를 메모리상에서 공유할수 있다는 장점이 있음

- 메모리상에 구체적인 객체 트리를 생성함

- XML 문서를 다루기 위한 복잡한 응용프로그램(브라우저, 편집기)에 적합

- 메모리 사용량이 큼

 

읽어보면 알겠지만 각각 장단점을 가지고 있어서 상황에 맞게 적절히 사용되어야 할듯합니다.

 

XML에 대해서 우선 간략정의를 했습니다.  

 

다음장에서는 DOM, SAX의 예제에 대해서 알아보겠습니다. 오타 또는 오류가 있으면 댓글, 쪽지주면 바로 수정해 놓겠습니다.

 

 

'PHP > PHP XML' 카테고리의 다른 글

PHP SimpleXML 구문  (0) 2013.07.17
PHP XML DOM 구문  (0) 2013.07.16
PHP XML(DOM,SAX) 파싱 구문  (0) 2013.07.15
Posted by 진격의 파파

댓글을 달아 주세요