SimpleXML提取标记包含。所有儿童元素

时间:2011-10-01 10:29:28

标签: php xml rss tags simplexml

我想用simplexml解析一个rss文件。如果我打印特定标签,则仅选择直接内容 - 不包括子项和“子”标签。我如何访问标签包括。儿童标签名称及其内容?

//load rss into $xml
foreach ($this->xml->channel->item as $item) {
  echo "<h3>{$this->out($item->title)}</h3>",
       $this->out($item->description);
}

1 个答案:

答案 0 :(得分:0)

您可以使用$ this-&gt; xml-&gt; children()来获取子节点,然后以递归方式使用它。我最近编写了一种方法,将一个XML块递归复制到另一个 - 这应该会向您展示可以使用的技术。

protected function copyXml(SimpleXMLElement $from, SimpleXMLElement $to)
{
    // Create a new branch in the target, as per the source
    $fromValue = (string) $from;
    if ($fromValue)
    {
        $toChild = $to->addChild($from->getName(), (string) $from);
    }
    else
    {
        $toChild = $to->addChild($from->getName());
    }

    // Copy attributes across
    foreach ($from->attributes() as $name => $value)
    {
        $toChild->addAttribute($name, $value);
    }

    // Copy any children across, recursively
    foreach ($from->children() as $fromChild)
    {
        $this->copyXml($fromChild, $toChild);
    }
}

HTH。