php simpleXML addChild包含现有的文本节点

时间:2011-09-21 04:44:18

标签: php simplexml

我想要一个现有元素并将一个孩子放在其中。但我希望预先存在的元素的内容也包含在新元素中。

所以我有<span class="folnum">Content</span>,我希望最终得到<span class="folnum"><a href="link">content</a></span>,我希望我能用php的simpleXML解析器做到这一点。

这是我到目前为止所得到的:

$folnum = $xmldoc->xpath("//span[@class='folnum']");
foreach ($folnum as $indivfolnum)
{
    $child = $indivfolnum->addChild("a", "wholemsImage");
    $child->addAttribute("href", (string) $indivfolnum);
}

我从中得到的是<span class="folnum">Content<a href="link">wholemsImage</a></span>

显然addChild()方法也在添加新内容,这实际上并不是我想要的。我希望它替换文本内容。

1 个答案:

答案 0 :(得分:2)

我认为这应该有效:

  1. Content保存到新变量:$link = (string) $indivfolnum;
  2. 清除<span>元素:$indivfolnum[0] = "";
  3. 然后追加新的孩子。
  4. 代码示例:

    $folnum = $xmldoc->xpath("//span[@class='folnum']");
    foreach ($folnum as $indivfolnum)
    {
        $link = (string) $indivfolnum;
        $indivfolnum[0] = "";
        $child = $indivfolnum->addChild("a", "wholemsImage");
        $child->addAttribute("href", $link);
    }
    

    它可以根据需要创建输出:

    <span class="folnum"><a href="Content">wholemsImage</a></span>