用Perl实现XML DOM的insertAfter函数

本文介绍了如何在Windows平台上利用Perl和C++编程语言实现MSXML不支持的insertAfter函数,包括两种不同语言的代码实现及环境说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《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 ( $newElement , $targetElement -> nextSibling ());
     }
}


Perl编译器:ActiverPerl 5.12
最新代码见: https://gist.github.com/1074492


---------------------------------------------------------------------------------------------------------------------------------------
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 , NULL );
ASSERT ( SUCCEEDED ( hr ));
}

return true ;
}

  

环境说明: MSXML4.0 + Visual Studio 2008
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值