PDA

View Full Version : Transform XML log action-pass xslt parameters


teognost
11-23-2006, 11:33 AM
I need to transform a xml file-therefore I created a 'Transform XML log' action.
In the Transform tab i have put:
-Input file ->xml to be transformed (full path)
-XSLT stylesheet->xslt file (full path)
-Output file->the file resulting after the style was applied(full path)

But xslt file takes 2 parameters -testassembly and profiledassembly:
<xsl:param name="testassembly" />
<xsl:param name="profiledassembly"/>

How can I pass these 2 params into VBP action?
I do not see any place for setting xslt parameters.

Basically I need to implement into VBP this NANT task:
<style style="xsl\AddCoveredAssembly.xslt" in="${ncover.index}" out="${ncover.index}.tmp">
<parameters>
<parameter name="testassembly" value="${testassembly}"/>
<parameter name="profiledassembly" value="${profiledassembly}"/>
</parameters>
</style>

teognost
11-24-2006, 04:29 AM
Could someone pls help me with this...
I need to solve it urgently!!!

kevina
11-24-2006, 12:42 PM
The Transform XML Log action is written specifically for transforming Visual Build Professional log files, so it probably isn't entirely appropriate for your particular use (the last tab is specific to the xml log format of Visual Build Professional).

Yours is the first request we've received for the ability to more generically transform xml (using dynamic parameter values) but it is a good one which we will consider directly supporting in a future version of Visual Build Professional.

In the meantime, you could use something like the code below as a VBScript function (untested) to do the transform:


Function TransformXML(xmlFileName, xslFileName, outFileName, parameterNamesValues)
' pass the parameters as "Name1|Value1,Name2|Value2" etc

Set xml = CreateObject("MSXML2.DOMDocument")
xml.async = False
xml.load xmlFileName

Set xsl = CreateObject("MSXML2.DOMDocument")
xsl.async = False
xsl.load xslFileName

Set xslt = CreateObject("MSXML2.XSLTemplate")
Set xslt.stylesheet = xsl
Set xslProc = xslt.createProcessor()
xslProc.input = xml

parameters = Split(parameterNameValues, ",")
If IsArray(parameters) Then
For i = LBound(parameters) To UBound(parameters)
param = Split(parameters(i), "|")
xslProc.addParameter param(0), param(1)
Next
End If

xslProc.transform
Set fout = vbld_FSO.CreateTextFile(outFileName)
fout.Write xslProc.output
fout.Close

End Function


You could add the above function (untested) as a project or global function, then invoke it in a Run Script step with something like this:


TransformXML "xmlfilename", "xslFileName", "outFileName", "param1Name|param1Value,param2Name|param2Value"


You can substitute %MACRONAME% for any of these values in the Run Script step

See the following urls for more info on the above function:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/10dca2a4-fe14-4588-b143-6125391bbc10.asp
http://p2p.wrox.com/topic.asp?TOPIC_ID=11225

teognost
11-24-2006, 01:47 PM
Thanks a lot for your answer.I already found an workaround-I created a 'Run Program' action where I run a XSLT command line processor made by Microsoft:
msxsl.exe "source.xml" "style.xslt" -o"result.html" "param1=value1" "param2"="value2".
The only problem is I need to install this msxsl.exe on my box,normally I would like to use only VisBuild for such a thing.
The solution proposed by you with VBScript is helpful as well.
However-if this action would be implemented in a future release of VBP-it would be great!!
I think you need just to change a little that 'Transform XML log' action in order to accept parameters.
I used that action for other XSLT transforming and it was ok-of course that XSLT didn't need parameters.

Francois
12-07-2006, 04:06 AM
I will also vote for a builtin XSLT action.

One thing to consider is to also pass a "MODE" setting to the XSLT processor in addition to the standard parameters. Most of my XSLT templates makes use of "MODE" attribute and I don't know how I managed without it.

Another idea to consider is that parameters can be of type IDispatch. You could for example supply access to your "DOM" for XSLT code to use. I can provide some examples if needed.

Hess_Joel
12-21-2009, 10:48 AM
I'd vote for an xslt action too.

kinook
12-21-2009, 10:53 AM
http://www.kinook.com/VisBuildPro/Manual/transformlogparamtab.htm

http://www.kinook.com/Forum/showthread.php?threadid=2411

Hess_Joel
12-21-2009, 10:56 AM
I don't want to transform the build log though. I have a generated XML file that needs to be converted.

kinook
12-21-2009, 11:00 AM
You don't have to transform the build log file.
http://www.kinook.com/VisBuildPro/Manual/transformlogtransformtab.htm