用Perl实现XML DOM的insertAfter函数

《JavaScriptDOM编程艺术》一书中曾经用JS实现过MSXML不支持的insertAfter函数,刚才我用Perl在Windows平台实现这个函数

  
  
use Win32:: OLE qw(in with) ;
use strict ;

use constant MSXMLDOM => "MSXML2.DOMDOCUMENT.4.0" ;

sub insertAfter {
     my ( $newElement , $targetElement ) = @_ ;
     # my $lastChild = $parent->{lastChild};

     # Next line can NOT work in Perl.
     # if($lastChild && $lastChild == $targetElement)

     if ( ! $targetElement -> nextSibling ())

     {
         $parent -> appendChild ( $newElement );
     }
     else
     {
         $parent -> insertBefore ( ottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.4em; color: rgb(0, $targetElement -> nextSibling ());
     }
}


Perl编译器:ActiverPerl 5.12


---------------------------------------------------------------------------------------------------------------------------------------
11/07/22 今天又用C++实现了一遍,代码如下:

   
   
bool CXmlUtil :: InsertAfter ( const XMLDOMNodePtr & nodeNew ,
const XMLDOMNodePtr & nodeTarget )
{
if ( ! nodeNew || ! nodeTarget )
{
return false ;
}

XMLDOMNodePtr nodeParent ;
HRESULT hr = nodeTarget -> get_parentNode ( & nodeParent );

if ( Failed ( hr ) || nodeParent == NULL )
{
return false ;
}

XMLDOMNodePtr nodeSibling ;
hr = nodeTarget -> get_nextSibling ( & nodeSibling );
ASSERT ( SUCCEEDED ( hr ));

if ( nodeSibling )
{
hr = nodeParent -> insertBefore ( nodeNew , _variant_t ( nodeSibling . GetInterfacePtr ()), NULL );
ASSERT ( SUCCEEDED ( hr ));
}
else
{
hr = nodeParent -> appendChild ( nodeNew ,179); ">NULL );
ASSERT ( SUCCEEDED ( hr ));
}

return true ;
}

  

环境说明: MSXML4.0 + Visual Studio 2008

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...