微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐