如何在xml中将子节点移动到父节点级别?

时间:2010-11-20 03:28:35

标签: php mysql xml simplexml

最近我一直在使用xml编码,问题就发生了。

给出像这样的xml:

<Colonel id="1">
  <Lieutenant_Colonel id="2">
    <Secretary id="6"/>
  </Lieutenant_Colonel>
  <Lieutenant_Colonel id="3">
    <Secretary id="7"/>
  </Lieutenant_Colonel>
  <Secretary id="5"/>
</Colonel>

现在上校(id = 1)已经和秘书一起去了(id = 5)

我们想要的xml就像

<!-- <Colonel id="1"> -->
  <Lieutenant_Colonel id="2">
    <Secretary id="6"/>
  </Lieutenant_Colonel>
  <Lieutenant_Colonel id="3">
    <Secretary id="7"/>
  </Lieutenant_Colonel>
  <!--
  <Secretary id="5"/>
</Colonel> -->

<Lieutenant_Colonel id="2">
  <Secretary id="6"/>
</Lieutenant_Colonel>
<Lieutenant_Colonel id="3">
  <Secretary id="7"/>
</Lieutenant_Colonel>

如何做这项工作?

请帮帮我

1 个答案:

答案 0 :(得分:0)

这是一个很长的时间,所以我不得不提出其他问题。首先,考虑这个功能:

function RemoveColonel($id, $secretaryId)
{
    $colXpath = '//colonel[@id="' . $id . '"]';
    $secXpath = $colXpath . '/Secretary[@id="' . $secretaryId . '"]';

    RemoveNode($secXpath);
    $colChildren = $rootXml->xpath($colXpath)->children();
    $children = array();

    foreach ($colChildren as $child ){
        $children[] = $child;
    }

    RemoveNode($colXpath);
    return $children;
}

考虑到上校的身份和上校的秘书,它删除了秘书,然后它拯救了上校的孩子去除上校并让孩子们归还。之后,如果您愿意,可以再次在根节点中插入元素。如果您在删除上校时无法拥有秘书ID,则可以通过删除id规范来解决xpath以删除作为上校子女的秘书。

RemoveNode代码有点长,所以我必须向你提问如何在PHP中使用SimpleXML删除节点的问题。

我希望我能得到一些帮助!