Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP DOMNode在注释后追加_Php_Sorting_Dom_Domdocument - Fatal编程技术网

PHP DOMNode在注释后追加

PHP DOMNode在注释后追加,php,sorting,dom,domdocument,Php,Sorting,Dom,Domdocument,你好 我需要关于PHP和DOM操作/排序的小附带应用程序的帮助。基本上,我需要一个适当的“appendAfter”函数的帮助,因为据我所知,PHP DOMNode只有“appendBefore” 我有一个如下所示的XML文件,我正在使用一个PHPWeb接口从中添加/删除元素 <shelf> <shelf-id>1</shelf-id> <somerandomthings>xyz</somerandomthings>

你好

我需要关于PHP和DOM操作/排序的小附带应用程序的帮助。基本上,我需要一个适当的“appendAfter”函数的帮助,因为据我所知,PHP DOMNode只有“appendBefore”

我有一个如下所示的XML文件,我正在使用一个PHPWeb接口从中添加/删除元素

<shelf>
    <shelf-id>1</shelf-id>
    <somerandomthings>xyz</somerandomthings>
    <!-- AAAAAAAAAAAAAAAAAAAA -->
    <book>
        <book-name>Alphabets</book-name>
        <book-color>Rainbow</book-color>
    </book>
    <book>
        <book-name>Animals</book-name>
        <book-color>Orange</book-color>
    </book>    
    <!-- BBBBBBBBBBBBBBBBBBBB -->
    <book>
        <book-name>Boats</book-name>
        <book-color>Green</book-color>
    </book>
    <!-- CCCCCCCCCCCCCCCCCCCC -->
    <book>
        <book-name>Cars</book-name>
        <book-color>Red</book-color>
    </book>    
    <!-- DDDDDDDDDDDDDDDDDDDD -->
    <!-- EEEEEEEEEEEEEEEEEEEE -->
    <!-- ETC...ETC...ETC..ETC -->
    <!-- PPPPPPPPPPPPPPPPPPPP -->
    <book>
        <book-name>Planes</book-name>
        <book-color>Blue</book-color>
    </book>
    <book>
        <book-name>Planets</book-name>
        <book-color>Silver</book-color>
    </book>
    <!-- TTTTTTTTTTTTTTTTTTTT -->
    <book>
        <book-name>Trees</book-name>
        <book-color>Brown</book-color>
    </book>
    <!-- RRRRRRRRRRRRRRRRRRRR -->
    <book>
        <book-name>Reptiles</book-name>
        <book-color>Green</book-color>
    </book>
    <!-- ZZZZZZZZZZZZZZZZZZZZ -->

    <somemorerandomthings>xyz</somemorerandomthings>
</shelf>
我的循环选择“B”标记,并在此之前插入所有“A”书籍。然后单击“C”标记并在其前面插入所有“B”图书。等等

问题在于以“Z”开头的书。我希望能够在上面的主循环中添加/排序所有书籍。目前,我有外部代码来选择somemorerandomthings元素,然后添加“Z”书籍。如果有人移动该元素,这可能会引起问题

旁注,我尝试从“A”->“Z”运行循环,并使用
$commentmarker->item(0)->nextSibling
作为要插入的标记点。但是,因为我将“插入”到原始DOM元素中,所以下一个同级的“A”标记是Alphabets Book元素,而不是“B”标记

为这个冗长的问题道歉,希望它是可以理解的

谢谢

<!-- AAAAAAAAAAAAAAAAAAA -->
<book>
    <book-name>Zoos</book-name>
    <book-color>Grey</book-color>
</book>
$commentmarker_path = "//shelf/comment()";

foreach (range('B', 'Z') as $alphabet) {
    $comment_id = str_repeat ($alphabet,20);
    $commentmarker = $xpath->query($commentmarker_path."[contains(.,'$comment_id')]"); 
    foreach( $sorted_books as $book_s ) 
        {
        $shelf_elm->item(0)->insertBefore($book_s, $commentmarker->item(0));
        }    
}