As an update for posterity, it works.
So, to recap, i have XML that looks like:
<body>Subscriber agrees to pay Company the sum of $<sub
name="install"/>, plus tax, if applicable, for the
installation (and sale if the System is sold) of the
System as follows: $<sub name="down_pmt"/> upon signing
this Agreement; $<sub name="pre_wire_pmt"/> upon
pre-wiring, if necessary; $<sub name="final_pmt"/>
upon substantial completion of installation.</body>
And I proces that with XSLT as such:
<xsl:template match="body">
<fragment font="Helvetica" fontsize="7">
<xsl:apply-templates />
</fragment>
</xsl:template>
<xsl:template match="sub">
<xsl:variable name="name" select="./@name"/>
<xsl:value-of select="$subvalues/*[(_at_)name = $name]"/>
</xsl:template>
And finally, I pass a nodeset from C# as follows:
XmlDocument paramDoc = new XmlDocument();
paramDoc.LoadXml("<subvalues><subvalue
name='install_pmt'>1,000,000</subvalue><subvalue
name='pre_wire_pmt'>20,000</subvalue></subvalues>");
XPathNavigator navigator = paramDoc.DocumentElement.CreateNavigator();
XsltArgumentList argList = new XsltArgumentList();
argList.AddParam("subvalues", "", navigator.Select("/*"));
And it works like a charm. The key is passing an XPathNodeIterator to
the xsl:param (the Select() method returns the XPathNodeIterator). If
anyone wants further details, let me know, and I'll put together a
sample app. :)
P.S. Thanks everyone.
Michael Kay wrote:
Passing parameters depends on the platform you are using. The mention of
C# gives the clue that you're on the Microsoft platform. You can create
a DOM and pass the document object as a parameter to the stylesheet,
accessing the contents of the DOM using path expressions.
Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
Based on the responses, I'm changing the model. This leads
to my next
question. Can I pass node-set (XmlElement) into an
XslTransform by way
of an XslArgument in C#? Than I can use Simon Woodside's
suggestion. I
will then pick off the value from the nodeset based on the
value coming
from the XML.
Thanks. :)
Michael Kay wrote:
and then pulling a value from an xsl:variable with the same name as
the data that came from the XML.
Any ideas? :)
how would you do it in C?
Variable names exist only at compile time, you can't
manipulate them
as strings at run time.
Change your data structure. Instead of having three
variables called
$x, $y, and $z, have a single variable $a whose value is a tree
containing elements x, y, and z. Then you can use path expressions
(and, if necessary, the xx:node-set() extension) to access the
components of the value dynamically.
Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
XSL-List info and archive:
http://www.mulberrytech.com/xsl/xsl-list
--
David B.
Bitton
david(_at_)codenoevil(_dot_)com
www.codenoevil.com
Code Made Fresh DailyT
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
--
David B. Bitton
david(_at_)codenoevil(_dot_)com
www.codenoevil.com
Code Made Fresh Daily™
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list