我需要使用XML来提供数据到网关。 我想知道从PHP“构造”XML树的最佳方法是什么。
我虽然做了类似模板文件的事情(因为它总是与变量参数相同的树),然后使用str_replace()
或regex
或类似的东西来填充我的树。
但是由于在PHP中有使用XML的工具,我想这可能不是最好的方法。 有什么想法吗?
答案 0 :(得分:2)
SimpleXML
可能是最好的选择:
$xml = new SimpleXMLElement('<root />');
$child = $xml->addChild('child');
$child->addChild('name', 'Tim');
echo $xml->asXML();
// Echoed result:
//
// <?xml version="1.0"?>
// <root>
// <child>
// <name>Tim</name>
// </child>
// </root>
答案 1 :(得分:0)
SimpleXML是一个非常容易使用的php库,但它也有点慢。对于复杂的xml操作,我喜欢使用FluentDOM,它为php带来了像api这样的jquery,并允许类似:
$fd = new FluentDOM();
$fd->contentType = 'html';
$menu = $fd->append('<ul/>');
// first menu item
$menu
->append('<li/>')
->append('<a/>')
->attr('href', '/sample.php')
->text('Sample');
// second menu item
$menu
->append('<li/>')
->append('<a/>')
->attr('href', 'http://fluentdom.org')
// add a class to the menu item <a>
->addClass('externalLink')
->text('FluentDOM');
FluentDOM比SimpleXML快一点,因为它使用了php5的原生DOM extension。但是创建简单xml字符串的最快方法是连接和sprintf。
$xml = "<root>";
$xml .= "<child>";
$xml .= sprintf("<name>%s</name>", $name);
$xml .= "<child>";
$xml .= "</root>";
答案 2 :(得分:0)
我经常吃樱桃布丁,但由于有椰子饼干,我想这可能不是最好的方法。
如果你现在适合的话,我认为寻找“可能最好的方法”没有意义 这是一种过早的优化。这是众所周知的万恶之源。
事实上,模板文件是一个很好的解决方案:熟悉,可读,可支持等。
XML与HTML是相同的结构化语言。因此,您可以使用任何模板引擎,包括PHP本身。
你有什么理由不想拥有这么整洁的模板吗?
<rss version="2.0">
<channel>
<title><?=$t['title']?></title>
<link><?=$t['link']?></link>
<description><?=$t['desc']?></description>
<language>en</language>
<pubDate><?=$t['pubdate']?></pubDate>
<lastBuildDate><?=$t['lbdate']?></lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>My RSS generator</generator>
<managingEditor><?=$t['email']?></managingEditor>
<webMaster><?=$t['email']?></webMaster>
<? foreach ($data as $row): ?>
<item>
<title><?=$row['name']?></title>
<link><?=$row['link']?></link>
<description><?=$row['desc']?></description>
<pubDate><?=$row['pubdate']?></pubDate>
<guid><?=$row['guid']?></guid>
</item>
<? endforeach ?>
</channel>
</rss>