PHP DOMNode在注释后追加
你好 我需要关于PHP和DOM操作/排序的小附带应用程序的帮助。基本上,我需要一个适当的“appendAfter”函数的帮助,因为据我所知,PHP DOMNode只有“appendBefore” 我有一个如下所示的XML文件,我正在使用一个PHPWeb接口从中添加/删除元素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>
<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));
}
}