IT_Programming/XML

PHP의 DOM함수로 XML 만들기 (2.<?xml encoding="euc-kr"?>추가하기)

JJun ™ 2007. 9. 30. 13:09

모든 xml은 다음과 같은 정의를 최상단에 단 한번만 주어야 한다.

 

<?xml version="1.0"?>

 

이것은 "이 문서는 xml표준 버전 1.0 의 규칙에 따른다..." 라는 것을 정의함을 의미한다.

그리고, 내가쓰는 PHP4 에서 사용되는 domxml_new_doc() 함수를 살펴보면...

 

(PHP 4 >= 4.2.1)

domxml_new_doc --  Creates new empty XML document
 
[사용법]
object domxml_new_doc ( string version)
 
다음과 같이 정의 되어 있으며 입력값으로 version이 들어간다.
 
문서의 처음에 사용해서 비어있는 xml 문서를 생성해야만 추가작업이 가능하다.
근데 난 한국사람이고 영어문화권을 제외한 나머지 언어를 가진 나라에서는
모든 xml문서를 선언할 때 encoding 값을 줘야한다.
한국어 xml 문서라면...
 
<?xml version="1.0" encoding="euc-kr"?>
 
과 같이 써야 한단 소리다.
근데 주어진 xml문서 생성함수로는 구현이 되지 않았다.
 
그래서, 고민끝에 domxml_open_file(), domxml_open_mem() 함수를 써서 만들어 보기로 했다.
 
 
비어있는 xml문서를 만들기 위해서 미리 선언된 양식의 문서가 있어야 한다.
 
################################### example.inc
 
<?php
$xmlstr = "<?xml version='1.0' encoding='euc-kr' standalone='yes'?>
<!DOCTYPE HTML SYSTEM 'HTML.dtd'>
<HTML>
</HTML>
";
?>
 
##########################################################
 
위에 dtd 문서 선언은 없어도 된다. 하지만 xml문서 선언부와 root element 역할을 하는 tag가 필요하다.
 
그리고, 이를 php에서 불러서 root element를 불러낸뒤 그뒤에 자식element를 추가해주면 원하는 xml문서를 얻을 수 있다. 물론 xml선언부는 주어진 PHP함수를 사용하지 않고 내 마음데로 조절이 가능하다.
 
#################################### dom01.php
 
<?
include("example.inc");
if (!$dom = domxml_open_mem($xmlstr)) {
  echo "Error while parsing the document\n";
  exit;
}
$root = $dom->document_element();
$head = $dom->create_element("HEAD");
$head = $root->append_child($head);
$title = $dom->create_element("TITLE");
$title = $head->append_child($title);
$text = $dom->create_text_node("This is the title");
$text = $title->append_child($text);
 
echo "<PRE>";
echo htmlentities($dom->dump_mem());
echo "</PRE>";

?>
 
####################################################
 
 
결과는 다음과 같다.
 
<?xml version="1.0" encoding="euc-kr" standalone="yes"?>
<!DOCTYPE HTML SYSTEM "HTML.dtd">
<HTML>
<HEAD><TITLE>This is the title</TITLE></HEAD></HTML>
 
이와 같은 방법으로 문서를 작성해 나가면 될 것이다.