你如何在PHP中使用XML?

时间:2011-04-10 15:41:05

标签: php xml

我需要使用XML来提供数据到网关。 我想知道从PHP“构造”XML树的最佳方法是什么。

我虽然做了类似模板文件的事情(因为它总是与变量参数相同的树),然后使用str_replace()regex或类似的东西来填充我的树。

但是由于在PHP中有使用XML的工具,我想这可能不是最好的方法。 有什么想法吗?

3 个答案:

答案 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>
相关问题