Dear Listees,
Im trying to transform XML to XML. In this transformation in trying to
extend the output by inserting a schema reference.
I'm using the SAXONb9-1-0-6n processor and Altova processor to test
the XSLT processing. Both give me the following error:
Error at xsl:attribute on line 23 column 19 of 400_o_pew_company.xslt:
XTDE0850: Invalid attribute name: {xmlns:xsi}
Error at xsl:attribute on line 24 column 19 of 400_o_pew_company.xslt:
XTSE0280: Undeclared namespace prefix {xsi}
Failed to compile stylesheet. 2 errors detected.
I have found the following site but Im not sure how to implement the
template option :
http://stackoverflow.com/questions/424148/xsl-create-xmlnsxsi-namespace-and-attribute/424362
Thanks for your time!
The source XML file looks like :
<?xml version = "1.0" encoding="UTF-8"?>
<main datecreated="2009-04-17T17:00:02"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="400_o_emp_company.xsd">
<DATA_RECORD>
<EMPLOYEENUMBER>012345</EMPLOYEENUMBER>
<LASTNAME>Small</LASTNAME>
<INITIALS>T</INITIALS>
<FIRSTNAME>Toby</FIRSTNAME>
<GENDER>M</GENDER>
<DATEOFBIRTH>1960-04-22</DATEOFBIRTH>
</DATA_RECORD>
<DATA_RECORD>
<EMPLOYEENUMBER>012346</EMPLOYEENUMBER>
<LASTNAME>Bakker</LASTNAME>
<INITIALS>H</INITIALS>
<FIRSTNAME/>
<GENDER>M</GENDER>
<DATEOFBIRTH>1951-02-13</DATEOFBIRTH>
</DATA_RECORD>
</main>
My transformation looks like :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="now" select="current-dateTime()"/>
<xsl:variable name="timestamp" select="format-dateTime($now,
'[Y0001][M01][D01][H01][m01]')"/>
<xsl:template match="main">
<xsl:result-document href="400_o_emp_{$timestamp}.xml">
<xsl:element name="Employees">
<!-- schema verwijzingsattributen in main -->
<!-- THIS IS WHERE IM HAVING TROUBLE -->
<xsl:attribute name="xmlns:xsi"><xsl:value-of select
="'http://www.w3.org/2001/XMLSchema-instance'"/></xsl:attribute>
<xsl:attribute
name="xsi:noNamespaceSchemaLocation"><xsl:value-of
select ="'400_o_emp.xsd'"/></xsl:attribute>
<!-- begin van de loop voor alle records -->
<xsl:for-each select="DATA_RECORD">
<xsl:element name="Employee">
<xsl:attribute
name="employeeNumber">
<xsl:value-of
select="EMPLOYEENUMBER"/>
</xsl:attribute>
<xsl:attribute name="lastName">
<xsl:value-of
select="LASTNAME"/>
</xsl:attribute>
<xsl:attribute name="Initials">
<xsl:value-of
select="INITIALS"/>
</xsl:attribute>
<xsl:attribute name="firstName">
<xsl:value-of
select="FIRSTNAME"/>
</xsl:attribute>
<xsl:attribute name="gender">
<xsl:value-of
select="GENDER"/>
</xsl:attribute>
<xsl:attribute
name="dateOfBirth">
<xsl:if
test="DATEOFBIRTH">
<xsl:if
test="DATEOFBIRTH!=''">
<xsl:call-template name="FormatDate">
<xsl:with-param name="DateTime" select="DATEOFBIRTH" />
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:result-document>
</xsl:template>
<xsl:template name="FormatDate">
<xsl:param name="DateTime" />
<xsl:variable name="year">
<xsl:value-of select="substring($DateTime,1,4)" />
</xsl:variable>
<xsl:variable name="month">
<xsl:value-of select="substring($DateTime,6,2)" />
</xsl:variable>
<xsl:variable name="day">
<xsl:value-of select="substring($DateTime,9,2)" />
</xsl:variable>
<xsl:value-of select="$day" />
<xsl:text>-</xsl:text>
<xsl:value-of select="$month" />
<xsl:text>-</xsl:text>
<xsl:value-of select="$year" />
</xsl:template>
</xsl:stylesheet>
XSD of the output file :
<?xml version="1.0"?>
<xs:schema xmlns=""
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:xs="http://www.w3.org/2001/XMLSchema" id="main">
<xs:element name="Employees"/>
<xs:complexType name="Employee">
<xs:sequence>
<xs:element name="DATA_RECORD" type="EmployeeType"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="dateCreated" type="xs:string"/>
</xs:complexType>
<xs:complexType name="EmployeeType">
<xs:attribute name="employeeNumber" type="xs:string"/>
<xs:attribute name="lastName" type="xs:string"/>
<xs:attribute name="Initials" type="xs:string"/>
<xs:attribute name="firstName" type="xs:string"/>
<xs:attribute name="gender" type="xs:string"/>
<xs:attribute name="dateOfBirth" type="xs:string"/>
</xs:complexType>
</xs:schema>
--~------------------------------------------------------------------
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>
--~--