You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by Anne-Claire Trommenschlager <An...@steria.ch> on 2001/05/21 16:41:27 UTC

Modify a DOM Tree and transform it after

Hi,

I have a big doubt. Is it possible to parse an xsl file, to modify it in
adding some nodes and then with an XML file to transform it in an HTML file.
When I try, it seems that it doesn't evaluate what I added in the xsl file. 
I add :
Element elt = xslDoc.createElement("TD");
toto.appendChild(elt);
Element elt1 = xslDoc.createElement("xsl:element");
elt.appendChild(elt1);
elt1.setAttribute("name", "FONT");			
Element elt2 = xslDoc.createElement("xsl:attribute");
Text txt2 = xslDoc.createTextNode("#FFFFFF");
elt2.appendChild(txt2);
elt1.appendChild(elt2);
elt2.setAttribute("name", "Color");			
Element elt3 = xslDoc.createElement("xsl:attribute");
Text txt3 = xslDoc.createTextNode("Verdana");
elt3.appendChild(txt3);
elt1.appendChild(elt3);
elt3.setAttribute("name", "FACE");
Element elt4 = xslDoc.createElement("xsl:attribute");
Text txt4 = xslDoc.createTextNode("2");
elt4.appendChild(txt4);
elt1.appendChild(elt4);
elt4.setAttribute("name", "SIZE");
Element elt5 = xslDoc.createElement("xsl:value-of");
elt1.appendChild(elt5);
elt5.setAttribute("select", "$param6");


And in my HTML file I have :
<xsl:element name="FONT">
<xsl:attribute name="Color">#FFFFFF</xsl:attribute>
<xsl:attribute name="FACE">Verdana</xsl:attribute>
<xsl:attribute name="SIZE">2</xsl:attribute>
<xsl:value-of select="$param6"></xsl:value-of>
</xsl:element>

It is exactly what I want to add in my xsl file.

Please can give me an answer or say me how I can do ?
Thanks
Anne-Claire



PS: I give you all my files :

XML file:
<?xml version="1.0" encoding="ISO-8859-1"?>

<DOC>

	<PRODUCTS>
	  	<PROD>
	    	<NAME>Stelink-Sun</NAME>
	    	<VERSION>6.3</VERSION>
	    	<BUILDDATE>05 May 2001</BUILDDATE>
	    	<OS>SunOS</OS>
	  	</PROD>
	  	<PROD>
	    	<NAME>Stelink</NAME>
	    	<VERSION>6.2</VERSION>
	    	<BUILDDATE>02 April 2001</BUILDDATE>
	    	<OS>Alpha</OS> 
	  	</PROD> 
	</PRODUCTS> 

</DOC>

XSL file :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:param name="param5" select="'default value'"/>
<xsl:param name="param6" select="'default value'"/>
<xsl:param name="param7" select="'default value'"/>
<xsl:param name="param8" select="'default value'"/>

<xsl:output method="html"/>


<xsl:template match="/">
	<xsl:apply-templates/>
</xsl:template>

<xsl:template match="PRODUCTS">
	
	<TABLE STYLE="width:98%">
		<xsl:element name="TR">
			<xsl:attribute
name="Bgcolor">#666666</xsl:attribute>
			
			<TD>
				<xsl:element name="FONT">
					<xsl:attribute
name="Color">#FFFFFF</xsl:attribute>
					<xsl:attribute
name="FACE">Verdana</xsl:attribute>
					<xsl:attribute
name="SIZE">2</xsl:attribute>
					<xsl:value-of select="$param5"/>
				</xsl:element>
			</TD>
			
		</xsl:element>
		<xsl:for-each select="PROD">			
			<xsl:element name="TR">
				<xsl:attribute
name="FACE">Verdana</xsl:attribute>
				<xsl:attribute name="SIZE">2</xsl:attribute>
				<xsl:element name="TD">
					<xsl:element name="FONT">
						<xsl:attribute
name="FACE">Verdana</xsl:attribute>
						<xsl:attribute
name="SIZE">2</xsl:attribute>
						<xsl:value-of
select="NAME"/>
					</xsl:element>
				</xsl:element>
			
				<xsl:element name="TD">
					<xsl:element name="FONT">
						<xsl:attribute
name="FACE">Verdana</xsl:attribute>
						<xsl:attribute
name="SIZE">2</xsl:attribute>
						<xsl:value-of
select="VERSION"/>
					</xsl:element>
				</xsl:element>
			
				<xsl:element name="TD">
					<xsl:element name="FONT">
						<xsl:attribute
name="FACE">Verdana</xsl:attribute>
						<xsl:attribute
name="SIZE">2</xsl:attribute>
						<xsl:value-of
select="BUILDDATE"/>
					</xsl:element>
				</xsl:element>
			
				<xsl:element name="TD">
					<xsl:element name="FONT">
						<xsl:attribute
name="FACE">Verdana</xsl:attribute>
						<xsl:attribute
name="SIZE">2</xsl:attribute>
						<xsl:value-of select="OS"/>
					</xsl:element>
				</xsl:element>
			</xsl:element>
		</xsl:for-each>
	</TABLE>
</xsl:template>

</xsl:stylesheet> 

JAVA file :
TransformerFactory tFactory = TransformerFactory.newInstance();

    if(tFactory.getFeature(DOMSource.FEATURE) &&
tFactory.getFeature(DOMResult.FEATURE))
    {
      DocumentBuilderFactory dFactory =
DocumentBuilderFactory.newInstance();
      dFactory.setNamespaceAware(true);
      
      DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
      Document xslDoc = dBuilder.parse("flux.xsl");
     
      NodeList liste = xslDoc.getElementsByTagName("*");
			
	Node toto = liste.item(10);
			for (int k=6;k<9;k++)
			{
				
			Element elt = xslDoc.createElement("TD");
			toto.appendChild(elt);
			
			Element elt1 = xslDoc.createElement("xsl:element");
			elt.appendChild(elt1);
			elt1.setAttribute("name", "FONT");
			
			Element elt2 =
xslDoc.createElement("xsl:attribute");
			Text txt2 = xslDoc.createTextNode("#FFFFFF");
			elt2.appendChild(txt2);
			elt1.appendChild(elt2);
			elt2.setAttribute("name", "Color");
			
			Element elt3 =
xslDoc.createElement("xsl:attribute");
			Text txt3 = xslDoc.createTextNode("Verdana");
			elt3.appendChild(txt3);
			elt1.appendChild(elt3);
			elt3.setAttribute("name", "FACE");
			
			Element elt4 =
xslDoc.createElement("xsl:attribute");
			Text txt4 = xslDoc.createTextNode("2");
			elt4.appendChild(txt4);
			elt1.appendChild(elt4);
			elt4.setAttribute("name", "SIZE");
			
			Element elt5 = xslDoc.createElement("xsl:value-of");
			elt1.appendChild(elt5);
			elt5.setAttribute("select", "$param"+k);
			}   

      DOMSource xslDomSource = new DOMSource(xslDoc);
      xslDomSource.setSystemId("flux.xsl");
      Transformer transformer = tFactory.newTransformer(xslDomSource);

      transformer.transform(new StreamSource("flux.xml"), new
StreamResult(new FileOutputStream("flux.html")));
	  
}