Hi all,
I have a template in one of my stylesheets that is supposed to do the
following;
- Copy everything except the @name and @identity attribute from the element
it references to
- Copy everything where the following matches ="$fieldCollection/field[
current()/@identity = @identity ]/
- Copy and overwrite any values above with the the values from the XML file
passed into the stylesheet
The problem I am having is that it does not copy the referenced fields over,
i.e. step one does not work.
<xsl:template match="field">
<xsl:copy>
<xsl:copy-of select="@*" />
<!-- Calculate the field number -->
<xsl:attribute name="number">
<xsl:value-of select="count(
preceding-sibling::field ) + 1" />
</xsl:attribute>
<!-- If the field element contains a reference
attribute we need to first copy the element it is refering to -->
<xsl:if test="$fieldCollection/field[
current()/@identity = @identity ]/@reference">
<xsl:copy-of select="$fieldCollection/field[
current()/@identity = @referece ]/@*" />
<xsl:element name="$fieldCollection/field[
current()/@identity = @referece ]/*">
<xsl:copy-of
select="$fieldCollection/field[ current()/@identity = @referece ]/*" />
</xsl:element>
</xsl:if>
<!-- Copy all elements and attributes from the field
collection -->
<xsl:copy-of select="$fieldCollection/field[
current()/@identity = @identity ]/@*" />
<xsl:element name="$fieldCollection/field[
current()/@identity = @identity ]/*">
<xsl:copy-of select="$fieldCollection/field[
current()/@identity = @identity ]/*" />
</xsl:element>
<!-- Also copy and override elements from the field
collection with the elements passed in -->
<xsl:element name="current()/*">
<xsl:copy-of select="current()/*" />
</xsl:element>
</xsl:copy>
</xsl:template>
The XML for $fieldCollection
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<field
name="positiveInteger"
identity="37B4604A-D9DD-713A-DB3E7C9EC4CFF509"
valid="\d"
minimum="1"
maximum="2,147,483,647" />
<field name="companyClassId"
identity="37A73A27-D9DD-713A-D8764F75D3C67A41"
reference="37B4604A-D9DD-713A-DB3E7C9EC4CFF509">
<option value="1">Limited by share</option>
<option value="2">Unlimited with a share capital</option>
<option value="3">Limited by guarantee</option>
<option value="4">No liability</option>
</field>
</root>
The XML passed to the stylesheet:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<form name="detail">
<segment value="01">
<step value="a">
<field
identity="37A2CF5C-D9DD-713A-D39F89D196AA638F" required="true"
display="Company type" />
</step>
</segment>
</form>
</root>
PS. Sorry I had to reply to an original post to get this message to the
list, my MS Outlook 2003 will NOT sent as plain text no matter how many
times I told it to.
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--