Last version:https://gist.github.com/1053576
sub
TransformWithArgs
{
my
(
$xsltFile
,
$xmlFile
,
$argsHash
)
=
@_
;
my
$template
=
Win32::
OLE
->
new
(
'MSXML2.XSLTemplate.4.0'
)
or
die
"Couldn't create MSXML2.XSLTemplate object.\n"
;
my
$xsltDoc
=
Win32::
OLE
->
new
(
'MSXML2.FreeThreadedDOMDocument.4.0'
)
or
die
"Couldn't create MSXML2.FreeThreadedDOMDocument.4.0 object.\n "
;
$xsltDoc
->
{
async
}
=
"false"
;
$xsltDoc
->
{
resolveExternals
}
=
"false"
;
$xsltDoc
->
load
(
$xsltFile
);
$template
->
{
stylesheet
}
=
$xsltDoc
;
my
$xsltProc
=
$template
->
createProcessor
();
my
$xmlDoc
=
Win32::
OLE
->
new
(
"Msxml2.DOMDocument.4.0"
);
$xmlDoc
->
load
(
$xmlFile
);
$xmlDoc
||
die
"Failed to load $xmlFile\n"
;
# Note: ? The code can not work here: $xsltProc->{input} = $docXhtml;
$xsltProc
->
LetProperty
(
'input'
,
$xmlDoc
);
# Add parametes of XSLT
foreach
my
$key
(
keys
%$argsHash
)
{
$xsltProc
->
addParameter
(
$key
,
$argsHash
->
{
$key
});
}
$xsltProc
->
transform
()
or
die
"Faied to transform.\n"
;
my
$result
=
$xsltProc
->
{
output
};
$result
;
}
本文介绍了一段Perl脚本,利用MSXML2库实现XSLT转换功能,适用于XML文件处理场景。脚本通过创建XSL模板和加载XSLT文档来实现XML文件的转换,并允许传入参数进行自定义转换。
1万+

被折叠的 条评论
为什么被折叠?



