在JSP中,您可以创建如下标记:
<myns:mytag>
<p>Content</p>
</myns:mytag>
并处理mytag实现中的内容。是不是可以在php中使用类似的东西?
答案 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
我会看一个模板系统(无论如何我会建议),看看他们提供的是什么。