如何在Php中嵌套内容?

时间:2012-03-06 13:15:25

标签: php

在JSP中,您可以创建如下标记:

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

并处理mytag实现中的内容。是不是可以在php中使用类似的东西?

3 个答案:

答案 0 :(得分:1)

如果您正在讨论在PHP的输出中嵌套标记,那么答案是肯定的。 PHP不关心你输出的字符串。

答案 1 :(得分: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(),当然这只是一个重要的例子,你需要更深入地构建它,但至少你会知道这个可能< / strong>工作:))

答案 2 :(得分:0)

嗯。评论说基本的PHP,没有模板系统。

您可以在<myns:mytag>打开输出缓冲,在</myns:mytag>将其关闭,然后获取输出并进行处理。这有点笨重。 http://php.net/manual/en/book.outcontrol.php

我会看一个模板系统(无论如何我会建议),看看他们提供的是什么。