2011-12-14 3 views
0

나는 내용이 XML 파일에 저장되는 PHP로 웹 사이트를 구축 중입니다. 기본적으로 하나의 index.php 페이지가 있습니다.이 페이지는 쿼리 문자열을 확인하고 XML에서 적절한 페이지를 제공합니다.PHP에서 expat가있는 문서의 일부만 구문 분석

예를 들어, www.mysite.com/?page=home을 입력하면 PHP 스크립트가 XML 파일에서 <page id="home"> 태그를 확인하고 해당 태그 안에있는 내용을 index.php에 붙여 넣습니다. <page> 태그의

내용은 따라서 HTML로 저장됩니다 : 나는 적절한 <page> 태그를 잡고 어떻게 든 내용을 구문 분석 할 수 있기를 기대했다

<xmlroot> 
    <page id="home"> 
    <h1>An HTML Header Tag!</h1> 
    <p>This is a paragraph</p> 
    </page> 
    [...etc] 
</xmlroot> 

. <page> 태그의 모든 내용이 유효한 HTML이라는 것을 알고 있으므로, expat을 사용하여 태그를 실행하고 echo을 바로 실행하려고했습니다.

DOMDocument 메서드를 사용하여 내용이 DOM 요소로 반환된다는 것을 제외하고는 올바르게 작동하는 <page>을 찾습니다. expat 구문 분석기에는 문자열이 필요합니다. 그래서 나는 두 가지 중 하나를 수행해야합니다

  1. 마술 그대로 모든 태그를 유지 그래서 나는 해외 거주자 파서에서 사용할 수있는 문자열로 DOM 요소를 변환합니다. 그러나이 작업을 수행 할 수있는 경우 expat 파서가 필요하지 않습니다. 변환 된 문자열을 곧바로 에코 할 수 있습니다.

  2. expat 이외의 것을 사용하십시오.

는 덧붙여, 난 그냥 &lt;&gt;와 XML의 <>을 대체 할 수있는 알고 있지만이 꽤 읽기 어려운 편집 코드를 만든다. 나는 가능하다면 그것을 피하고 싶습니다.

+0

젠장, 방금 CDATA에 대해 생각해 봤는데 ... 한번 시도해 볼게. 나는 그것을 할 수 있다면 이것을 업데이트 할 것이다. –

+0

CDATA를 사용하여 잘 해결되었습니다. 나는 같은 문제가있는 다른 사람들을 돕기 위해 완전한 답을 게시 할 것입니다. stackoverflow가 나를 허용 할 때까지 기다려야 할 것입니다. 약 7 시간이 걸립니다. :-) –

답변

0
<?php 

$doc = new DOMDocument('1.0'); 

$root = $doc->createElement('html'); 
$root = $doc->appendChild($root); 

$head = $doc->createElement('head'); 
$head = $root->appendChild($head); 

$title = $doc->createElement('title'); 
$title = $head->appendChild($title); 

$text = $doc->createTextNode('< This is the title >'); 
$text = $title->appendChild($text); 

echo $head->ownerDocument->saveXML($head); 

있는 DOMDocument :: saveXML() 출력 단지 특정 노드


http://www.php.net/manual/en/domdocument.savexml.php

+0

이 질문을 게시하기 전에 saveXML을 살펴 보았습니다. 그러나 실제로는 제대로 작동하지 않았습니다. 하기. 어쨌든 고마워! –

+0

오, 방금 당신이 의미하는 것이 당신이 생각한 것이 아니란 것을 깨달았습니다. CDATA 태그를 제거하고 saveXML을 사용하여 구문 분석 한 결과 훌륭한 결과를 얻었습니다. –

0

D' 아에 $ 노드 파라미터 걸린다. 질문을하기 전에 몇 분 더 기다렸다가. 그때 $page->nodeValue를 사용하여 page 태그 및 출력 내용을 잡을 수

<xmlroot> 
    <page id="home"> 
    <![CDATA[ 
     <h1>An HTML Header Tag!</h1> 
     <p>This is a paragraph</p> 
    ]]> 
    </page> 
    [...etc] 
</xmlroot> 

: CDATA 따라서 태그에

이 솔루션은 모든 것을 싸는 것이 었습니다. 나는 다른 사람들에게 내가 방금 준 무의미한 두통을 구하기를 희망하며 이것을 제공한다.