php, xml, xpath, xslt 이용하기
글쓴이: lacovnk / 작성시간: 수, 2008/12/10 - 8:35오후
xml 문서의 특정 노드에 대해서만 xslt를 적용하려 합니다.
(동적으로 생성해야 하므로, xslt 내에서 xquery 를 박아넣을 수는 없습니다;)
... 그런데 검색된 부분이 아니라 자꾸 전체 문서에 대해서 변환되네요.
php5 입니다.
아, 그리고 xml 에 get parameter를 넘겨주면 xslt로만 해결할 수는 없나요? (예를 들면 와우 전정실같은 형태) 어차피 중간에 처리해주는 부분이 들어가야하는건가..
// 1. 검색할 xml 문서 만들고
$xmlObj = new DOMDocument;
$xmlObj->loadxml($xml_content);
// 2. xpath로 해당 노드를 찾았음
$xpath = new DOMXPath($xmlObj);
$query = "/bar[@id='bar']";
$entries = $xpath->query($query);
$qres = $entries->item(0);
// 3. 변환을 위한 xslt processor 생성
$proc = new XSLTProcessor;
$proc->importStyleSheet(DOMDocument::loadxml($xslt_content));
// 4. 이후 해당 노드에 대해서만 xslt 적용
$result = $proc->transformToDoc($qres);
Forums:


왜 저렇게 안되는지
왜 저렇게 안되는지 모르겠지만, 다음과 같이 중간에 XML string을 생성해서 해결했습니다.
$xml_str = file_get_contents('foo.xml'); $xslt_str = file_get_contents('foo.xsl'); $xpath_query = "foo[@id='bar']"; $node_str = _find_node($xml_str, $xpath_query); print _apply_xslt($node_str, $xslt_str); function _apply_xslt($xml_str, $xslt_str) { $xslt_proc = new XSLTProcessor; $xslt_proc->importStyleSheet(DOMDocument::loadxml($xslt_str)); $result = $xslt_proc->transformToDoc(DOMDocument::loadXML($xml_str)); if($result != false){return $result->saveHTML();} else {return "Transformatin Failed";} } function _find_node($xml_str, $xpath_query) { $xml = new DOMDocument; $xml->loadxml($xml_str); $xpath = new DOMXPath($xml); $entries = $xpath->query($xpath_query); $qres = $entries->item(0); return $xml->saveXML($qres); }댓글 달기