【问题标题】:XML reforming with DOM使用 DOM 重构 XML
【发布时间】:2011-08-04 11:02:24
【问题描述】:

我正在尝试重新格式化 XML 添加中间级节点。

这是我的输入:

<channel> <item> <title>Advanced PHP Book</title> </item> <item> <title>MySQL primer</title> </item> <item> <title>C++ for beginners</title> </item> </channel>

我需要它在最后(在频道和项目之间添加页面节点):

<channel> <page> <item> <title>Advanced PHP Book</title> </item> <item> <title>MySQL primer</title> </item> <item> <title>C++ for beginners</title> </item> </page> </channel>

这是我的测试代码:


$sxe = simplexml_load_string($string);

$dom_sxe = dom_import_simplexml($sxe);

$dom = new DOMDocument('1.0');

$channel = $dom->appendChild($dom->createElement('channel'));

$page = $channel->appendChild($dom->createElement('page'));

$dom_sxe = $dom->importNode($dom_sxe, true);
$dom_sxe = $page->appendChild($dom_sxe);

$dom->formatOutput = true;

echo $dom->saveXML(); 

我遇到的问题是通道元素加倍了。 请帮忙。

【问题讨论】:

    标签: php xml dom


    【解决方案1】:

    我不认为这应该太难:我认为你使用 simplexml 东西过于复杂了。

    $dom = new DOMDocument;
    $dom->loadXML($string);
    
    // create the <page> element
    $page = $dom->createElement('page');
    
    while ($dom->firstChild->firstChild) {
        // move the items in <channel> to the <page> element
        $page->appendChild($dom->firstChild->firstChild);
    }
    
    // insert the <page> element into <channel>
    $dom->firstChild->appendChild($page);
    $dom->saveXML();
    

    【讨论】:

      【解决方案2】:
      $xml = '<channel> <item> <title>Advanced PHP Book</title> </item> <item> <title>MySQL primer</title> </item> <item> <title>C++ for beginners</title> </item> </channel>';
      
      $dom = new DOMDocument;
      $dom->loadXML($xml);
      $page = $dom->createElement('page');
      $items = $dom->getElementsByTagName('item');
      
      while ($items->length) {
          $page->appendChild($items->item(0));
      }
      
      $dom->getElementsByTagName('channel')->item(0)->appendChild($page);
      echo $dom->saveXML();
      

      输出

      <?xml version="1.0"?>
      <channel>    <page><item> <title>Advanced PHP Book</title> </item><item> <title>MySQL primer</title> </item><item> <title>C++ for beginners</title> </item></page></channel>
      

      See it.

      【讨论】:

      • item 元素不止一个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      • 2020-01-17
      • 2012-11-18
      • 2012-01-10
      相关资源
      最近更新 更多