Click to See Complete Forum and Search --> : Add Element Help


longman111
01-22-2010, 04:33 PM
In the following example I need to add an element before the first <AMLEntry> tag and after the last </AMLEntry> tag. Have been working at it but no success yet. Thanks for any help.

<Report xmlns="urn:crystal-reports:schemas">
<Parts>
<Part>
<AMLEntry>
<AMLName>HISCOMPANY</AMLName>
<AMLDescription>JAO002</AMLDescription>
<AMLVerified>0</AMLVerified>
<AMLNumber>JAO001</AMLNumber>
</AMLEntry>
<AMLEntry>
<AMLName>HISCOMPANY</AMLName>
<AMLDescription>JAO002</AMLDescription>
<AMLVerified>0</AMLVerified>
<AMLNumber>JAO002</AMLNumber>
</AMLEntry>
<Rohs>0</Rohs>
<StockCode>S4</StockCode>
<InternalPartNumber>JOHNO</InternalPartNumber>
<Description>JAO002</Description>
<Revision>B99</Revision>
</Part>
</Parts>
</Report>

With element <AML> added

<Report xmlns="urn:crystal-reports:schemas">
<Parts>
<Part>
<AML> (new element here)
<AMLEntry>
<AMLName>HISCOMPANY</AMLName>
<AMLDescription>JAO002</AMLDescription>
<AMLVerified>0</AMLVerified>
<AMLNumber>JAO001</AMLNumber>
</AMLEntry>
<AMLEntry>
<AMLName>HISCOMPANY</AMLName>
<AMLDescription>JAO002</AMLDescription>
<AMLVerified>0</AMLVerified>
<AMLNumber>JAO002</AMLNumber>
</AMLEntry>
<AML> (new element here)
<Rohs>0</Rohs>
<StockCode>S4</StockCode>
<InternalPartNumber>JOHNO</InternalPartNumber>
<Description>JAO002</Description>
<Revision>B99</Revision>
</Part>
</Parts>

Charles
01-22-2010, 05:15 PM
With what tools?

longman111
01-22-2010, 09:30 PM
I am creating an xslt using xmlspy.

Webnerd
01-23-2010, 11:12 PM
Can you post the XSLT?

Webnerd
01-24-2010, 12:28 AM
This should give you what you want:



<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cr="urn:crystal-reports:schemas">
<xsl:strip-space elements="*" />

<xsl:output encoding="UTF-8" indent="yes" method="xml" />

<xsl:template match="/">
<xsl:element name="Report" namespace="urn:crystal-reports:schemas">
<xsl:apply-templates />
</xsl:element>
</xsl:template>

<xsl:template match="cr:Parts">
<xsl:element name="Parts">
<xsl:apply-templates />
</xsl:element>
</xsl:template>

<xsl:template match="cr:Part">
<xsl:element name="Part">
<xsl:element name="AML" />
<xsl:apply-templates />
</xsl:element>
</xsl:template>

<xsl:template match="cr:AMLEntry">
<xsl:variable name="length" select="count(../cr:AMLEntry)" />
<xsl:variable name="index" select="position()" />
<xsl:element name="AMLEntry">
<xsl:copy-of select="@*|node()" />
</xsl:element>
<xsl:if test="$index = $length">
<xsl:element name="AML" />
</xsl:if>
</xsl:template>

<xsl:template match="cr:Rohs|cr:StockCode|cr:InternalPartNumber|cr:Description|cr:Revision">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

longman111
01-25-2010, 04:01 AM
Thanks - this was a big help!