2011-08-26 6 views
2

사용자가 만든 스타일로 내 DB에 템플릿이 있습니다. 사용자는 일반적으로 어리 석고 php 코드에 간섭하고 싶지 않기 때문에 템플릿을 렌더링하기 전에 스타일에 실제 값을 삽입하고 싶습니다. 그것은 동적 인 가치입니다.PHP DOM 조작

그래서 나는

<p>Here is your value:</p> 
<span id="value"></span> 
<p>Enjoy it!</p> 

같은 값에 대한 자리 표시자를 가지가 있습니다. 이것은 아마도 가장 쉬운 방법 일 것입니다. 여기서 jQuery를 사용하고 싶지는 않지만 비슷한 것을 원합니다.

저는 PHP의 DOMDocument 클래스를 보았습니다.이 클래스는 트릭을하는 것으로 보이는데 한 가지 문제가 있습니다. $dom->saveHTML()은 항상 전체 HTML 트리를 저장하는 것으로 보입니다. $dom->saveHTML($element)은 그 요소를 저장하지만 템플릿에 한 번에 여러 개가 있습니다.

html 항목없이 모두 저장하려면 속임수가 있습니까?

+0

여기에서 문제를 이해한다고 말할 수는 없지만 ... 더 잘 설명하면 마음에 드십니까? 그 사이에 HTML없이 여러 요소를 저장해야합니까? –

+0

그래서 body 태그/요소의 내부 HTML 만 필요합니까? – hakre

+0

템플릿 템플릿의 HTML 만 필요합니다. – Lanbo

답변

1

saveHTML()은 요소 자체와 모든 하위 항목을 저장합니다.

당신은 전체 문서 내용 저장 몸 노드를 저장할 수 있습니다

:

$body = $doc->getElementsByTagName('body')->item(0); 
$html = $doc->saveHTML($body); 

// and remove <body></body> 
$html = substr($html, strlen('<body>'), -strlen('</body>')); 

또는 신체의 아이들 하나 하나 저장 :

$html = ''; 
foreach($body->childNodes as $node) { 
    $html .= $doc->saveHTML($node); 
} 
1

당신은 libxslt를의 XSLTProc

$html = <<<HTML 
<p>Here is your value:</p> 
<span id='value'></span> 
<p>Enjoy it!</p> 
HTML; 

$xslt = <<<XSL 
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> 

<xsl:output encoding='UTF-8' method='html'/> 

<xsl:template match='/html/body/*'> 
    <xsl:copy-of select='.'/> 
</xsl:template> 

</xsl:stylesheet> 
XSL; 

$htmldoc = new DOMDocument(); 
$htmldoc->loadHTML($html); 
$xsltdoc = new DOMDocument(); 
$xsltdoc->loadXML($xslt); 

$xsltproc = new XSLTProcessor(); 
$xsltproc->importStylesheet($xsltdoc); 
print $xsltproc->transformToXML($htmldoc); 
을 사용할 수 있습니다

출력 :

<p>Here is your value:</p> 
<span id='value'></span> 
<p>Enjoy it!</p>