>백엔드 개발 >PHP 튜토리얼 >php5 php5 및 xml 예

php5 php5 및 xml 예

WBOY
WBOY원래의
2016-07-29 08:35:10794검색

http://trash.chregu.tv/phpconf2003/examples/
PHP5의 새로운 XML 기능
저자 Christian Stocker Translation ice_berg16(꿈을 찾는 허수아비)
독자를 위한
이 글은 그것을 위한 것입니다. 이 책은 PHP5의 새로운 XML 기능에 관심이 있는 모든 수준의 PHP 개발자를 대상으로 합니다. 독자가 XML에 대한 기본 지식을 가지고 있다고 가정합니다. 그러나 이미 PHP에서 XML을 사용하고 있다면 이 기사를 통해 이점을 얻을 수도 있습니다.
소개
오늘날의 인터넷 세계에서 XML은 더 이상 유행어가 아니며 널리 수용되고 표준화되었습니다. 따라서 PHP4에 비해 PHP5의 XML 지원이 더 많은 주목을 받았습니다. PHP4에서는 거의 항상 비표준, API 중단, 메모리 누수 및 기타 불완전한 기능에 직면하게 됩니다. PHP4.3에서는 일부 단점이 개선되었지만 개발자는 원래 코드를 버리고 전체 코드를 PHP5에서 다시 작성하기로 결정했습니다.
이 기사에서는 PHP5의 XML의 모든 흥미로운 새 기능을 하나씩 소개합니다.
PHP4의 XML
초기 PHP 버전에서는 이미 XML을 지원했으며 이는 모든 XML 문서를 쉽게 구문 분석할 수 있는 SAX 기반 인터페이스일 뿐입니다. PHP4에 DOMXML 확장 모듈이 추가되면서 XML이 더 잘 지원됩니다. 나중에 XSLT가 보충 자료로 추가되었습니다. PHP 4 단계 전반에 걸쳐 HTML, XSLT 및 DTD 유효성 검사와 같은 다른 기능도 DOMXML 확장에 추가되었습니다. 불행하게도 XSLT 및 DOMXML 확장은 항상 실험 단계에 있고 API 부분이 두 번 이상 수정되었습니다. 여전히 기본적으로 설치할 수 없습니다. 또한 DOMXML 확장은 W3C에서 확립한 DOM 표준을 따르지 않지만 고유한 명명 방법을 가지고 있습니다. PHP 4.3에서는 이 부분이 개선되고 많은 메모리 누수 및 기타 기능이 수정되었지만 아직 안정된 단계로 발전하지 못했고 일부 심각한 문제는 수정이 거의 불가능해졌습니다. 기본적으로 SAX 확장만 설치됩니다. 일부 다른 확장은 널리 사용되지 않습니다.
이러한 모든 이유로 PHP의 XML 개발자들은 전체 코드를 PHP5로 다시 작성하고 사용 표준을 따르기로 결정했습니다.
PHP5용 XML
XML을 지원하는 모든 부분이 PHP5에서 거의 완전히 다시 작성되었습니다. 이제 모든 XML 확장은 GNOME 프로젝트의 LIBXML2 라이브러리를 기반으로 합니다. 이를 통해 다양한 확장 모듈이 서로 상호 운용될 수 있으며 핵심 개발자는 기본 라이브러리에서만 개발하면 됩니다. 예를 들어 복잡한 메모리 관리를 한 번만 구현하면 모든 XML 관련 확장 기능을 향상시킬 수 있습니다.
PHP5는 PHP4의 유명한 SAX 파서를 상속받은 것 외에도 W3C 표준을 따르는 DOM과 LIBXSLT 엔진을 기반으로 하는 XSLT도 지원합니다. 동시에 PHP의 고유한 SimpleXML 확장과 표준 호환 SOAP 확장도 추가됩니다. XML이 점점 더 중요해짐에 따라 PHP 개발자는 기본 설치 방법에 XML에 대한 더 많은 지원을 추가하기로 결정했습니다. 이는 이제 SAX, DOM 및 SimpleXML을 사용할 수 있으며 이러한 확장 기능이 더 많은 서버에 설치된다는 의미입니다. 그런 다음 PHP를 컴파일할 때 XSLT 및 SOAP에 대한 지원을 명시적으로 구성해야 합니다.
데이터 스트림 지원
이제 모든 XML 확장은 PHP에서 직접 액세스하지 않더라도 PHP 데이터 스트림을 지원합니다. 예를 들어, PHP5에서는 파일이나 지시어에서 데이터 스트림에 액세스할 수 있습니다. 기본적으로 일반 파일에 액세스할 수 있는 곳이면 어디에서나 PHP 데이터 스트림에 액세스할 수 있습니다.
데이터 흐름은 PHP4.3에서 간략하게 소개되었으며 파일 액세스, 네트워크 액세스 및 기능 세트 공유와 같은 기타 작업을 포함하여 PHP5에서 더욱 개선되었습니다. PHP 코드를 사용하여 자신만의 데이터 흐름을 구현할 수도 있으므로 데이터 액세스가 매우 간단해집니다. 이 부분에 대한 자세한 내용은 PHP 문서를 참고하시기 바랍니다.
SAX
SAX의 정식 명칭은 Simple API for XML입니다. XML 문서를 파싱하기 위한 인터페이스로 콜백 형식을 기반으로 합니다. SAX는 PHP3부터 지원되어 현재까지 큰 변화가 없습니다. PHP5에서는 API 인터페이스가 변경되지 않았으므로 코드가 계속 실행됩니다. 유일한 차이점은 더 이상 EXPAT 라이브러리를 기반으로 하지 않고 LIBXML2 라이브러리를 기반으로 한다는 것입니다.
이러한 변경으로 인해 네임스페이스 지원에 몇 가지 문제가 발생했으나 LIBXML2.2.6 버전에서는 이 문제가 해결되었습니다. 그러나 이전 버전의 LIBXML2에서는 이 문제가 해결되지 않았으므로 xml_parse_create_ns()를 사용하는 경우 시스템에 LIBXML2.2.6을 설치하는 것이 좋습니다.
DOM
DOM(Document Object Model)은 XML 문서 트리에 액세스하기 위해 W3C에서 개발한 표준 집합입니다. PHP4에서는 DOMXML을 사용하여 이를 작동할 수 있습니다. DOMXML의 주요 문제점은 표준 명명 방법을 따르지 않는다는 것입니다. 그리고 오랫동안 메모리 누수 문제가 있었습니다(PHP4.3에서는 이 문제가 해결되었습니다).
새로운 DOM 확장은 W3C 표준을 기반으로 하며 메서드 및 속성 이름을 포함합니다. Javascript와 같은 다른 언어의 DOM에 익숙하다면 PHP에서 유사한 기능을 작성하는 것이 매우 쉬울 것입니다. 메소드와 매개변수가 동일하기 때문에 매번 문서를 확인할 필요가 없습니다.
새로운 W3C 표준으로 인해 DOMXML 기반 코드는 실행되지 않습니다. PHP의 API는 매우 다릅니다. 그러나 코드에서 W3C 표준과 유사한 메서드 명명 방법을 사용하는 경우 이식은 그리 어렵지 않습니다. 로드 함수와 저장 함수를 수정하고 함수 이름에서 밑줄을 제거하기만 하면 됩니다(DOM 표준은 첫 글자에 대문자를 사용합니다).물론 다른 곳에서도 조정이 필요하지만 주요 논리는 변경되지 않은 채로 남아 있을 수 있습니다.
DOM 읽기
이 글에서는 DOM 확장의 모든 기능을 설명하지 않을 것이므로 그럴 필요도 없습니다. 아마도 HTTP://www.w3.org/DOM에 대한 문서를 북마크에 추가해야 할 것입니다. 이 기사의 XML 파일에 있는 대부분의 예에서 동일한 파일을 사용할 것입니다. zend.com에는 매우 간단한 RSS 버전이 있습니다. 아래 텍스트를 텍스트 파일에 붙여넣고 Articles.xml로 저장합니다.
http://www.zend.com/zend/week/week172.php
http://www.zend.com/zend/tut/tut-hatwar3.php
이 예제를 다운로드하려면 DOM 개체를 가져오려면 먼저 DOMDocument 개체를 만든 다음 XML 파일을 로드하세요.
$dom = new DomDocument();
$dom->load("articles.xml")
위에서 언급한 것처럼 PHP의 데이터 스트림을 사용하여 XML 문서를 로드할 수 있습니다. 예:
$dom->load("file:///articles.xml")
(또는 다른 유형의 데이터 스트림)
XML 문서를 로드하려는 경우 브라우저 또는 표준 마크업으로 사용:
print $dom->saveXML()
파일로 저장하려면 다음을 사용하세요.
print $dom-> "newfile.xml");
(이렇게 하면 파일 크기가 stdout으로 전송됩니다.)
물론 이 예제에는 기능이 많지 않으므로 좀 더 유용한 작업을 해보겠습니다. 모든 제목 요소를 가져오겠습니다. 여러 가지 방법이 있는데, 가장 간단한 방법은 getElementsByTagName($tagname)을 사용하는 것입니다.
$titles = $dom->getElementsByTagName("title")
foreach($titles as $node) {
print $node->textContent . "n";
}
textContent 속성은 W3C 표준을 사용하여 요소의 모든 텍스트 노드를 빠르게 읽을 수 있도록 해줍니다.
$node->firstChild->data;
(이때 firstChild 노드가 필요한 텍스트 노드인지 확인해야 합니다. 그렇지 않으면 모든 하위 노드를 순회해야 합니다. 그것을 찾으려면) .
또 주목해야 할 점은 getElementsByTagName()이 PHP4의 get_elements_by_tagname()과 같은 배열이 아닌 DomNodeList 객체를 반환한다는 점입니다. 하지만 이 예에서 볼 수 있듯이 foreach 문을 사용하면 쉽게 탐색할 수 있습니다. $titles->item(0)을 사용하여 노드에 직접 액세스할 수도 있습니다. 이 메소드는 첫 번째 제목 요소를 반환합니다.
모든 제목 요소를 가져오는 또 다른 방법은 루트 노드에서 탐색하는 것입니다. 보시다시피 이 방법은 더 복잡하지만 제목 요소 이상이 필요한 경우 더 유연합니다.
foreach ($dom->documentElement->childNodes as $articles) {
//노드가 요소(nodeType == 1)이고 이름이 item인 경우 루프를 계속합니다.
if ( $articles ->nodeType == 1 && $articles->nodeName == "item") {
foreach ($articles->childNodes as $item) {
//노드가 요소인 경우 이름이 제목이면 인쇄합니다.
if ($item->nodeType == 1 && $item->nodeName == "title") {
print $item->textContent . "n";
}
}
}
}
XPath
XPaht는 XML용 SQL과 같습니다. XPath를 사용하면 XML의 일부 패턴 구문과 일치하는 특정 노드를 쿼리할 수 있습니다. 문서. XPath를 사용하여 모든 제목 노드를 가져오려면 다음을 수행하세요.
$xp = new domxpath($dom)
$titles = $xp->query("/articles/item/title" );
foreach ($titles as $node) {
print $node->textContent . "n"
}
?> ) 메서드이지만 Xpath는 훨씬 더 강력합니다. 예를 들어 항목의 하위 요소가 아닌 기사의 하위 요소인 제목 요소가 있는 경우 getElementsByTagName()이 이를 반환합니다. /articles/item/title 구문을 사용하면 지정된 깊이와 위치의 제목 요소만 가져옵니다. 이는 단순한 예일 뿐이며, 자세히 살펴보면 다음과 같습니다.
/articles/item[position() = 1]/title 모두 반환
/articles/item/title[@id 첫 번째 item 요소 = '23'] id 속성을 포함하는 모든 제목을 반환하고 값은 23입니다.
/articles//title 기사 요소 아래의 모든 제목을 반환합니다(번역자 주: //모든 깊이를 나타냄)
또한 다음을 수행할 수 있습니다. 특별한 형제 요소, 특별한 텍스트 내용이 있는 요소 또는 네임스페이스를 사용하는 요소 등을 가리키는 쿼리가 포함된 쿼리입니다. 많은 수의 XML 문서를 쿼리해야 하는 경우 XPath를 올바르게 사용하는 방법을 배우면 사용이 간단하고 실행이 빠르며 표준 DOM보다 코드가 덜 필요합니다.
DOM에 데이터 쓰기
문서 개체 모델은 읽고 쿼리하는 것뿐만 아니라 작업하고 쓰는 것도 가능합니다.(DOM 표준은 작성자가 상상할 수 있는 모든 환경을 지원하기를 원했기 때문에 약간 길지만 매우 잘 작동합니다.) Article.xml 파일에 새 요소를 추가하는 다음 예를 살펴보십시오.
$item = $dom->createElement("item");
$title = $dom->createElement("title")
$titletext = $dom->createTextNode(" PHP5의 XML");
$title->appendChild($titletext);
$item->appendChild($title);
$dom->documentElement->appendChild($item );
print $dom->saveXML();
먼저 모든 필수 노드, 항목 요소, 제목 요소 및 항목 제목이 포함된 텍스트 노드를 생성한 다음 모든 링크를 추가합니다. 노드, 제목 요소에 텍스트 노드를 추가하고 항목 요소에 제목 요소를 추가한 다음 마지막으로 기사 루트 요소에 항목 요소를 삽입합니다. 이제 XML 문서에 새로운 기사 목록이 생겼습니다.
확장 클래스(class)
좋아요, 위의 예는 PHP4에서 DOMXML 확장을 사용하여 수행할 수 있습니다(API만 약간 다릅니다). DOM 클래스를 직접 확장할 수 있다는 것은 PHP5의 새로운 기능입니다. 작성하기가 더 쉬워집니다. 더 읽기 쉬운 코드가 가능해집니다. 다음은 DOMDocument 클래스를 사용하여 다시 작성된 전체 예제입니다.
class Articles extends DomDocument {
function __construct() {
//호출해야 합니다!
parent::__construct(); }
function addArticle($title) {
$item = $this->createElement("item")
$titlespace = $this->createElement("title")
$titletext = $this->createTextNode($title);
$titlespace->appendChild($titletext)
$item->appendChild($titlespace); documentElement- >appendChild($item);
}
}
$dom = new Articles()
$dom->load("articles.xml")
$ dom- >addArticle("XML in PHP5");
print $dom->save("newfile.xml");
HTML
PHP5에서 흔히 눈에 띄지 않는 기능은 HTML을 사용하는 libxml2 라이브러리입니다. 지원을 통해 DOM 확장을 사용하여 올바른 형식의 XML 문서를 로드할 수 있을 뿐만 아니라 XPath 및 SimpleXML과 같은 사용 가능한 모든 메서드 및 기능을 사용하여 형식이 올바르지 않은 HTML 문서를 로드하여 표준 DOMDocument 개체로 처리할 수도 있습니다.
HTML의 기능은 통제할 수 없는 사이트의 콘텐츠에 액세스해야 할 때 특히 유용합니다. XPath, XSLT 또는 SimpleXML의 도움으로 정규식을 사용하여 문자열이나 SAX 파서를 비교하는 등 많은 코드를 절약할 수 있습니다. 이는 HTML 문서가 제대로 구조화되지 않은 경우(자주 발생하는 문제!) 특히 유용합니다.
다음 코드는 php.net의 홈페이지를 가져와 구문 분석하고 첫 번째 제목 요소의 콘텐츠를 반환합니다.
$dom = new DomDocument();
$dom->loadHTMLFile("http://www.php.net/")
$title = $dom->getElementsByTagName("title) ");
print $title->item(0)->textContent;
지정된 요소를 찾을 수 없으면 출력에 오류가 포함될 수 있습니다. 귀하의 웹 사이트가 HTML4 코드를 출력하기 위해 여전히 PHP를 사용하고 있다면 DOM 확장이 HTML 문서를 로드할 수 있을 뿐만 아니라 HTML4 형식 파일로 저장할 수도 있다는 좋은 소식이 있습니다. DOM 문서를 추가한 후 $dom->saveHTML()을 사용하여 저장하세요. 출력 HTML 코드가 W3C 표준을 따르도록 하려면 tidy 확장(tidy Extension)을 사용하지 않는 것이 가장 좋습니다. Libxml2 라이브러리에서 지원하는 HTML은 모든 상황을 고려하지 않으며 범용이 아닌 형식의 입력을 잘 처리하지 않습니다.
검증
XML 문서의 검증이 점점 더 중요해지고 있습니다. 예를 들어, 일부 외국 리소스에서 XML 문서를 얻은 경우 이를 처리하기 전에 해당 문서가 특정 형식을 준수하는지 확인해야 합니다. 다행스럽게도 가장 널리 사용되는 세 가지 표준(DTD, XML 스키마 또는 RelaxNG) 중 하나를 사용하여 유효성 검사기를 작성할 수 있으므로 PHP로 자신만의 유효성 검사기를 작성할 필요가 없습니다. .
DTD는 SGML 시대에 탄생한 표준으로 XML의 새로운 기능(예: 네임스페이스)이 부족하고 XML로 작성되지 않기 때문에 구문 분석 및 변환도 어렵습니다.
XML Schemai는 W3C에서 개발한 표준으로 널리 사용되며 XML 문서를 검증하는 데 필요한 거의 모든 것을 포함하고 있습니다.
RelaxNG는 복잡한 XML 스키마 표준에 대응하는 것이며 자유당에 의해 만들어졌습니다. XML 스키마보다 구현하기 쉽기 때문에 점점 더 많은 프로그램이 RelaxNG를 지원하기 시작했습니다.
레거시가 없는 경우 문서나 매우 복잡한 XML 문서를 계획한 다음 RelaxNG를 사용하세요. 쓰고 읽는 것이 상대적으로 간단하며 이를 지원하는 도구가 점점 더 많아지고 있습니다. XML 템플릿에서 RelaxNG 문서를 자동으로 생성할 수 있는 Trang이라는 도구도 있습니다.libxml2에서는 RelaxNG(및 오래된 DTDS)만 완벽하게 지원됩니다. 단, libxml2도 곧 ML 스키마를 완벽하게 지원할 예정입니다.
XML 문서의 유효성을 검사하는 구문은 매우 간단합니다.
$dom->validate('articles.dtd')
$dom->relaxNGValidate('articles.rng')
$dom ->schemaValidate('articles.xsd');
현재 이들 모두는 단순히 true 또는 false를 반환하며 오류는 PHP 경고로 출력됩니다. 분명히 사용자에게 친숙한 정보를 반환하는 것은 좋은 생각이 아니며 PHP 5.0 이상 버전에서는 개선될 예정입니다. 이것이 정확히 어떻게 구현될지는 아직 논의 중이지만 오류 보고는 확실히 더 잘 처리될 것입니다.
SimpleXML
SimpleXML은 PHP의 XML 제품군에 추가된 마지막 구성원입니다. SimpleXML 확장을 추가하는 목적은 표준 객체 속성과 반복자를 사용하여 XML 문서에 액세스하는 더 간단한 방법을 제공하는 것입니다. 확장에는 메서드가 많지 않지만 여전히 매우 강력합니다. 문서에서 모든 제목 노드를 검색하려면 이전보다 적은 코드가 필요합니다.
$sxe = simplexml_load_file("articles.xml");
foreach($sxe->item as $item) {
print $item->title ."n";
뭐하고 있어요? 먼저 Articles.xml을 SimpleXML 객체에 로드합니다. 그런 다음 $sxe의 모든 항목 요소를 가져오고 마지막으로 $item->title은 제목 요소의 내용을 반환합니다. 그게 전부입니다. $item->title['id']를 사용하여 연관 배열을 사용하여 속성을 쿼리할 수도 있습니다.
정말 놀라운 일입니다. 예를 들어 $item->title[0]은 예제와 동일한 결과를 반환합니다. $sxe->item->title as $item)은 문서의 모든 제목 요소가 아닌 첫 번째 제목만 반환합니다. (XPath에서 예상했던 것과 같습니다).
SimpleXML은 실제로 Zend Engine 2의 새로운 기능을 사용하는 첫 번째 확장입니다. 따라서 이러한 새로운 기능에 대한 테스트 지점이 되었습니다. 개발 단계에서는 버그와 예측할 수 없는 오류가 드물지 않다는 점을 알아야 합니다.
위의 예에서 사용된 모든 노드를 순회하는 방법 외에도 SimpleXML에는 단일 노드에 액세스하는 더 간단한 방법을 제공하는 XPath 인터페이스도 있습니다.
foreach($sxe->xpath('/articles/item/title') as $item) {
print $item . "n";
이 코드는 부인할 수 없습니다. 이전 예보다 짧지는 않지만 더 복잡하거나 깊이 중첩된 XML 문서를 제공하면 SimpleXML과 함께 XPath를 사용하면 많은 입력 작업을 줄일 수 있다는 것을 알게 될 것입니다.
SimpleXML 문서에 데이터 쓰기
SimpleXML을 구문 분석하고 읽을 수 있을 뿐만 아니라 SimpleXML 문서를 변경할 수도 있습니다. 최소한 몇 가지 확장을 추가합니다:
$sxe->item->title = "XML in PHP5" //제목 요소의 새 콘텐츠.
$sxe->item->title['id'] = 34; // 제목 요소의 새로운 속성.
$xmlString = $sxe->asXML(); // SimpleXML 객체를 직렬화된 XML 문자열로 반환
print $xmlString;
상호 운용성
SimpleXML도 libxml2 라이브러리를 기반으로 하기 때문입니다. 를 사용하면 속도에 거의 영향을 주지 않고 SimpleXML 개체를 DomDocument 개체로 쉽게 변환할 수 있습니다. (문서를 내부적으로 복사할 필요는 없습니다.) 이 메커니즘 덕분에 현재 작업에 적합한 도구를 사용할 수 있습니다.
$sxe = simplexml_import_dom($ dom) ;
$dom = dom_import_simplexml($sxe);
XSLT
XSLT는 XML 문서를 다른 XML 문서로 변환하는 데 사용되는 언어로, 함수형 언어 계열에 속합니다. 프로그램 처리는 객체지향 언어(예: PHP)와 다릅니다. PHP4에는 두 개의 XSLT 프로세서가 있습니다: Sablotron(널리 사용되는 XSLT 확장에 있음) 및 Libxslt(domxml 확장에 있음) 이 두 API는 서로 호환되지 않으며 사용 방법도 다릅니다. PHP5는 Libxml2를 기반으로 하고 따라서 PHP5의 XML 개념에 더 부합하기 때문에 선택된 libxslt 프로세서만 지원합니다.
이론적으로 Sablotron을 PHP5에 바인딩하는 것이 가능하지만 안타깝게도 아무도 그렇게 하지 않았습니다. 따라서 Sablotron을 사용하고 있다면 PHP5에서 libxslt 프로세서로 전환해야 합니다. Libxslt는 Javascript 예외 처리를 지원하는 Sablotron이며 PHP의 강력한 데이터 흐름을 사용하여 Sablotron의 고유한 구성표 처리기를 다시 구현할 수도 있습니다. 또한 libxslt는 가장 빠른 XSLT 프로세서 중 하나이므로 무료로 속도를 높일 수 있습니다. (실행 속도는 Sablotron의 2배입니다.)
이 기사에서 논의된 다른 확장과 마찬가지로 XSL 확장, DOM 확장 간에 또는 그 반대로 XML 문서를 교환할 수 있습니다. 실제로 EXT/XSL 확장은 XML 문서를 로드하고 저장하지 않기 때문에 이 작업을 수행해야 합니다. 인터페이스는 DOM 확장만 사용할 수 있습니다. XSLT 변환을 처음 배울 때, 이 API는 Mozilla에서 "차용"되었기 때문에 여기에는 W3C 표준이 없습니다.
먼저 XSLT 스타일시트가 필요합니다. 다음 텍스트를 새 파일에 붙여넣고 articls.xsl을 저장합니다.
그런 다음 PHP 스크립트에서 호출합니다.:
/* XML 및 XSL 문서를 DOMDocument 개체에 로드*/
$xsl = new DomDocument();
$xsl->load("articles.xsl");
$inputdom = new DomDocument()
$inputdom-> Articles.xml");
/* XSLT 프로세서 만들기 및 스타일 시트 가져오기*/
$proc = new XsltProcessor();
$xsl = $proc->importStylesheet($ xsl);
$proc->setParameter(null, "titles", "Titles");
/* XML 문서 변환 및 출력 */
$newdom = $proc->transformToDoc($ inputdom);
print $newdom->saveXML();
?>
위의 예에서는 먼저 DOM 메서드 load()를 사용하여 XSLT 스타일 시트 Article.xsl을 로드한 다음 새 XsltProcessor를 만듭니다. 개체는 나중에 XSLT 스타일 시트 개체를 사용하는 데 사용됩니다: setParameter(namespaceURI, 이름, 값). 마지막으로 XsltProcessor 개체는 변환을 시작하고 새 DOMDocument를 반환합니다. 물체.
이 API의 장점은 동일한 스타일시트를 사용하여 많은 XML 문서를 변환할 수 있다는 것입니다. 한 번만 로드하면 재사용할 수 있습니다. 왜냐하면TransformToDoc() 함수는 다른 XML 문서에 적용될 수 있기 때문입니다.
transformToDoc() 외에도 두 가지 변환 방법이 있습니다. 변환 방법은 다음과 같습니다. 변환 방법은 변환 ToXML($dom)이 문자열을 반환하고, 변환 ToURI($dom, $uri)가 변환된 문서를 파일이나 PHP 데이터 스트림에 저장합니다. indent="yes"와 같은 XSLT 구문을 사용하려는 경우 DOMDocument 개체가 이 정보를 저장할 수 없기 때문에 변환된 결과를 문자열이나 파일에 직접 저장할 때만 변환ToDoc()을 사용할 수 없습니다. 당신은 이것을 할 수 있습니까?
PHP 함수 호출
XSLT 확장에 새로 추가된 마지막 기능은 XSLT 스타일 시트 내에서 PHP 함수를 호출하는 기능입니다. 정통 XML 지지자들은 분명히 이 기능을 좋아하지 않을 것입니다(이러한 스타일 시트는 약간 복잡하고 논리와 디자인을 혼동하기 매우 쉽지만 일부 장소에서는 매우 유용합니다. XSLT는 기능에 있어서 매우 제한적이며, 다른 언어로 날짜를 출력하려고 시도하는 것조차 매우 번거롭습니다. 하지만 이 기능을 사용하면 PHP를 사용하는 것만큼 쉽게 처리할 수 있습니다. 다음은 XSLT에 함수를 추가하는 코드입니다.
function dateLang () {
return strftime("%A")
}
$xsl = new DomDocument(); xsl ->load("datetime.xsl");
$inputdom = new DomDocument();
$inputdom->load("today.xml")
$proc = new XsltProcessor( ) ;
$proc->registerPhpFunctions();
//문서를 로드하고 $xsl을 사용하여 처리합니다.
$xsl = $proc->importStylesheet($xsl); * XML 문서를 변환하고 출력합니다. */
$newdom = $proc->transformToDoc($inputdom)
print $newdom->saveXML()
?> XSLT 스타일시트 datetime.xsl인 경우 이 함수를 호출합니다.
다음은 스타일 시트인 today.xml을 사용하여 변환할 XML 문서입니다. (마찬가지로 Articles.xml도 동일한 결과를 얻습니다.)
위 스타일 시트, PHP 스크립트 및 모든 XML 파일은 현재 시스템 설정의 언어로 주 이름을 출력합니다. php:function()에 더 많은 매개변수를 추가할 수 있으며, 추가된 매개변수는 PHP 함수에 전달됩니다. php:functionString() 함수가 있습니다. 이 함수는 모든 입력 매개변수를 자동으로 문자열로 변환하므로 PHP에서 변환할 필요가 없습니다.
변환하기 전에 $xslt->registerPhpFunctions()를 호출해야 합니다. 그렇지 않으면 보안상의 이유로 PHP 함수 호출이 실행되지 않습니다(항상 XSLT 스타일시트를 신뢰하십니까?). 현재 액세스 시스템은 구현되지 않았습니다. 아마도 이 기능은 PHP5의 향후 버전에서 구현될 것입니다.
요약
PHP의 XML 지원은 큰 발전을 이루었습니다. 이는 표준을 준수하고 강력하며 상호 운용 가능하며 기본 옵션으로 설치되며 사용이 승인되었습니다. 새로 추가된 SimpleXML 확장은 XML 문서에 액세스하는 간단하고 빠른 방법을 제공하므로 특히 구조화된 문서가 있거나 강력한 XPath를 사용할 수 있는 경우 많은 코드를 절약할 수 있습니다.
PHP5 XML 확장에 사용되는 기본 라이브러리인 libxml2 덕분에 이제 DTD, RelaxNG 또는 XML 스키마를 사용하여 XML 문서의 유효성을 검사할 수 있습니다.
XSL 지원도 개선되어 이제 Libxslt 라이브러리를 사용하여 원래 Sablotron 라이브러리에 비해 성능이 크게 향상되었습니다. 또한 XSLT 스타일 시트 내에서 PHP 함수를 호출하면 더욱 강력한 XSLT 코드를 작성할 수 있습니다.
PHP4나 다른 언어에서 XML을 사용해 본 적이 있다면 PHP5의 XML 기능이 마음에 들 것입니다. XML은 PHP5에서 많이 변경되었으며 표준을 준수하며 다른 도구 및 언어와 동일합니다.
링크
PHP 4 관련
Domxml 확장: http://www.php.net/domxml/
Sablotron 확장: http://www.php.net/xslt/
Libxslt : http://www.php.net/manual/en/functi...-stylesheet.php
PHP 5 관련
SimpleXML: http://www.php.net/simplexml/
스트림 : http://www.php.net/manual/en/ref.stream.php
표준
DOM: http://www.w3.org/DOM
XSLT: http://www .w3.org/TR/xslt
XPath: http://www.w3.org/TR/xpath
XML 스키마: http://www.w3.org/XML/Schema
RelaxNG: http://relaxng.org/
Xinclude: http://www.w3.org/TR/xinclude/
도구
Libxml2, 기본 라이브러리: http://xmlsoft.org/
Trang, Schema/RelaxNG/etc 변환기: http://www.thaiopensource.com/relaxng/trang.html
저자 소개
Christian Stocker는 취리히에 있는 Bitflux GmbH의 창립자이자 CEO입니다. XSL, DOM 및 imagick 확장의 관리자, 독일 서적 PHP de Luxe의 공동 저자이자 Bitflux Editor 및 Popoon과 같은 다른 오픈 소스 프로젝트에서도 작업하고 있습니다. chregu@php.net으로 그에게 연락할 수 있습니다.

위 내용은 php5 내용을 포함하여 php5와 xml 예제를 소개하고 있어 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.