Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

transforming xml to html using xslt

What I am doing: I am trying to transform xml to html using xslt.


Question: The program is executing without any error, it is gproducing the output file also, but it does not transform the xml to html. My guess is that the for loop in the xsl is not fetching the data.


XSLTTest.java

 package JavaXSLTExample;
import javax.xml.transform.ErrorListener;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
public class XSLTTest {
public static void main(String[] args)
{
    /*if (args.length != 3)
    {
        System.err.println("give command as follows : ");
        System.err.println("XSLTTest data.xml converted.xsl converted.html");
        return;
    }*/
    String dataXML = "C:\\Users\\Devrath\\Desktop\\XSL\\FileOne.xml";
    String inputXSL = "C:\\Users\\Devrath\\Desktop\\XSL\\FileTwo.xsl";
    String outputHTML = "C:\\Users\\Devrath\\Desktop\\XSL\\output1.html";

    XSLTTest st = new XSLTTest();
    try
    {
        st.transform(dataXML, inputXSL, outputHTML);
    }
    catch (TransformerConfigurationException e)
    {
        System.err.println("TransformerConfigurationException");
        System.err.println(e);
    }
    catch (TransformerException e)
    {
        System.err.println("TransformerException");
        System.err.println(e);
    }
    }

    public void transform(String dataXML, String inputXSL, String outputHTML)
    throws TransformerConfigurationException,
    TransformerException
    {
        TransformerFactory factory = TransformerFactory.newInstance();
        StreamSource xslStream = new StreamSource(inputXSL);
        Transformer transformer = factory.newTransformer(xslStream);
        StreamSource in = new StreamSource(dataXML);
        StreamResult out = new StreamResult(outputHTML);
        transformer.transform(in, out);
        System.out.println("The generated HTML file is:" + outputHTML);
    }
}

FileOne.xml

<languages-list>
  <language>
    <name>Kannada</name>
    <region>Karnataka</region>
    <users>38M</users>
  <family>Dravidian</family>
  </language>
  <language>
    <name>Telugu</name>
    <region>Andra Pradesh</region>
    <users>74M</users>
    <family>Dravidian</family>
  </language>
  <language>
    <name>Tamil</name>
    <region>TamilNadu</region>
    <users>61M</users>
    <family>Dravidian</family>
  </language>
  <language>
    <name>Malayalam</name>
    <region>Kerela</region>
    <users>33M</users>
    <family>Dravidian</family>
  </language>
  <language>
    <name>Hindi</name>
    <region>Andaman and Nicobar Islands, North india, Parts of North east</region>
    <users>442M</users>
    <family>Indo Aryan</family>
  </language>
  <language>
    <name>Assamese</name>
    <region>Assam, Arunachal Pradesh</region>
    <users>13M</users>
    <family>Indo Aryan</family>
  </language>
</languages-list>

FileTwo.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
        <html>
            <body>
                <h1>Indian Languages details</h1>
                <table border="1">
                    <tr>
                        <th>Language</th>
                        <th>Family/Origin</th>
                        <th>No. of speakers</th>
                        <th>Region</th>
                    </tr>
         <xsl:for-each select="language-list/language">
                    <tr>
                        <td><xsl:value-of select="name"/></td>
                        <td><xsl:value-of select="family"/></td>
                        <td><xsl:value-of select="users"/></td>
                        <td><xsl:value-of select="region"/></td>
                    </tr>
                 </xsl:for-each>
                </table>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet> 

Output.html

<html>
<body>
<h1>Indian Languages details</h1>
<table border="1">
<tr>
<th>Language</th><th>Family/Origin</th><th>No. of speakers</th><th>Region</th>
</tr>
</table>
</body>
</html>
like image 842
Devrath Avatar asked Dec 08 '22 10:12

Devrath


1 Answers

XML is very unforgiving. This:

     <xsl:for-each select="language-list/language">

needs to be:

     <xsl:for-each select="languages-list/language">
like image 64
michael.hor257k Avatar answered Dec 20 '22 19:12

michael.hor257k