2012-03-06 132 views
0

在JSP中,你可以像這樣創建標籤:如何在Php中嵌套內容?

<myns:mytag> 
<p>Content</p> 
</myns:mytag> 

並處理mytag執行的內容。在PHP中可以這樣嗎?

+3

這是否與你使用的模板系統如Smarty,Twig等有關? – James 2012-03-06 13:17:24

+0

不只是我想知道的一個基本問題 – gotch4 2012-03-06 13:29:36

回答

1

如果您在討論PHP的輸出中的嵌套標記,那麼答案是肯定的。 PHP不關心你輸出的字符串。

0

讓我們玩了一會兒,說這是你的XML:

<?xml version="1.0" encoding="utf-8"?> 
<html xmlns:mn="http://example.com"> 
    <head> 
     <mn:title>Foor</mn:title> 
    </head> 

    <body> 
     <div>Navigation</div> 
     <mn:content> 
      Lorem ipsum 
     </mn:content> 
    </body> 
</html> 

它存儲在$data,你會與下面的類解析它:

class Parser { 
    // DOMDocument 
    protected $xml; 

    // Handles mn:title 
    protected function actionTitle(DOMNode $node){ 
     $title = $this->xml->createElement('title', 'My dynamic title'); 
     $node->parentNode->replaceChild($title, $node); 
    } 

    // Handles mn:content 
    protected function actionContent(DOMNode $node){ 
     $content = $this->xml->createElement('div', 'Lorem ipsum sit dolor'); 
     $node->parentNode->replaceChild($content, $node); 
    } 

    // Initializes data 
    public function __construct($data){ 
     $this->xml = new DOMDocument(); 
     $this->xml->preserveWhiteSpace = false; 
     $this->xml->loadXML($data); 
     $this->xml->formatOutput = true; 
    } 

    // Browse all elements 
    public function parse() { 
     $list = $this->xml->getElementsByTagNameNS('http://example.com', '*'); 
     while($list->length){ 
      $node = $list->item(0); 
      $tagName = ucfirst(substr($node->nodeName, strpos($node->nodeName, ':') + 1)); 
      echo $tagName . "\n"; // Title, Content 
      $funcName = 'action' . $tagName; 

      $this->$funcName($node); 

      $list = $this->xml->getElementsByTagNameNS('http://example.com', '*'); 
     } 
    } 

    // Get 
    public function get(){ 
     return $this->xml->saveXML(); 
    } 
} 

// And build some output 
$parser = new Parser($data); 
$parser->parse(); 
echo $parser->get(); 

我們正在採取的功能getElementsByTagNameNS()優勢,當然這只是一個沉重的例子,你需要更深入地構建它,但至少你會明白這個可能工作:)

0

嗯。評論說基本的PHP,沒有模板系統。

你可以在<myns:mytag>上開啓輸出緩衝,在</myns:mytag>關閉輸出緩衝,然後抓取輸出並處理它。這有點笨重。 http://php.net/manual/en/book.outcontrol.php

我會看看模板系統(我會建議,一般來說),看看他們有什麼提供。