Re: Beginner question: Accessing XML-Attributes via Template?

gkamle <[email protected]> Tue, 7 Jul 2015 06:11:30 -0700 (PDT)
Newsgroups gmane.comp.web.freemarker.user
Message-ID <[email protected]>
I am new to "smooks and freemarker".I want access elements in xml document.I
am getting this exception while acessing xml element.I am sending my code.

Exception:-
------------

 For "${...}" content: Expected a string or something automatically
convertible to string (number, date or boolean), but this evaluated to a
sequence+hash (wrapper: f.e.dom.NodeListModel):
    ==> employee["first_name"]  [in template "free-marker-template" at line
1, column 84]

----
Tip: This XML query result can't be used as string because for that it had
to contain exactly 1 XML node, but it contains 0 nodes. That is, the
constructing XML query has found no matches.
----
----
FTL stack trace ("~" means nesting-related):
    - Failed at: ${employee["first_name"]}  [in template
"free-marker-template" at line 1, column 82]

----
Java stack trace (for programmers):
----
freemarker.core.NonStringException: [... Exception message was already
printed; see it above ...]
    at freemarker.core.EvalUtil.coerceModelToString(EvalUtil.java:381)
    at freemarker.core.Expression.evalAndCoerceToString(Expression.java:82)
    at freemarker.core.DollarVariable.accept(DollarVariable.java:40)
    at freemarker.core.Environment.visit(Environment.java:312)

The following are versions
java version : "1.7.0_45"
freemarker   : 2.3.22
smooks       : 1.6


javacode:-
-----------
package test;

import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.net.URI;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.milyn.Smooks;
import org.milyn.SmooksException;
import org.milyn.container.ExecutionContext;
import org.milyn.event.report.HtmlReportGenerator;
import org.milyn.io.StreamUtils;
import org.milyn.payload.StringResult;
import org.xml.sax.SAXException;


public class SmooksExample {
    public SmooksExample() {
        // TODO Auto-generated constructor stub
    }
    protected static void runSmooksNew() throws IOException, SAXException,
SmooksException {

        try {
            Long stTime = System.currentTimeMillis();
            System.out.println(stTime + "==" + new Date());
            Writer xmlResultWriter = new BufferedWriter(new FileWriter(new
File("C:\\Files\\SmookExample\\output_sax.dat")));
            transCustomerCSV(new File("C:\\Files\\emp_namespace.xml"),
xmlResultWriter);
            Long edTime = System.currentTimeMillis();
            System.out.println(edTime + "==" + (edTime-stTime) + "===="+ new
Date());
            String times = String.format("%d min, %d sec", 
                    TimeUnit.MILLISECONDS.toMinutes(edTime-stTime),
                    TimeUnit.MILLISECONDS.toSeconds(edTime-stTime) - 
                   
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(edTime-stTime))
                );
            System.out.println(times);
        } finally {
            //smooks.close();
        }
    }
    public static void transCustomerCSV(File csvSourceReader, Writer
xmlResultWriter) throws IOException, SAXException {
        File f = new File("C:/TEMPLATES/smooks-config.xml");
        URI u = f.toURI();
        Smooks smooks = new Smooks(u.getPath());
        ExecutionContext ec = smooks.createExecutionContext();
        smooks.filterSource(ec, new StreamSource(csvSourceReader), new
StreamResult(xmlResultWriter));
    }
    /**
     * @param args
     */
    public static void main(String[] args) throws IOException, SAXException,
SmooksException {
        System.out.println("\n\n");
        System.out.println("==============Message In==============");
        SmooksExample.runSmooksNew();
        System.out.println("======================================\n");
    }
}


Smooks-config.xml
--------------------
<smooks-resource-list
xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd"
xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.3.xsd"
xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.2.xsd"
xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd">
  <params>
    SAX
    false
  </params>
  <core:namespaces>
    <core:namespace prefix="empl" uri="http://www.example.com/employees"/>
  </core:namespaces>
  <resource-config selector="employee,first_name">
    <resource>org.milyn.delivery.DomModelCreator</resource>
  </resource-config>
  <ftl:freemarker applyOnElement="first_name">
    <ftl:template>
    </ftl:template>
  </ftl:freemarker>
</smooks-resource-list>

sample data xml file name:  emp_namespace.xml:-
--------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<empl:employees xmlns:empl="http://www.example.com/employees">
     <empl:employee id="1">
         <empl:first_name>Bill</empl:first_name>
         <empl:last_name>Adams</empl:last_name>
         <empl:age>25</empl:age>
         <empl:hire_date>12-06-1995</empl:hire_date>
         <empl:title>Java programmer</empl:title>
        <empl:DateCreated>
            <empl:Year>1980</empl:Year>
            <empl:Month>01</empl:Month>
            <empl:Day>01</empl:Day>
        </empl:DateCreated>
        <empl:DateCompleted>
            <empl:Year>1981</empl:Year>
            <empl:Month>02</empl:Month>
            <empl:Day>02</empl:Day>
        </empl:DateCompleted>
     </empl:employee>
     <empl:employee id="2">
         <empl:first_name>Mary</empl:first_name>
         <empl:last_name>Jones</empl:last_name>
         <empl:age>32</empl:age>
         <empl:hire_date>22-09-2001</empl:hire_date>
         <empl:title>Sales manager</empl:title>
         <empl:DateCreated>
            <empl:Year>1982</empl:Year>
            <empl:Month>03</empl:Month>
            <empl:Day>03</empl:Day>
        </empl:DateCreated>
        <empl:DateCompleted>
            <empl:Year>1983</empl:Year>
            <empl:Month>04</empl:Month>
            <empl:Day>04</empl:Day>
        </empl:DateCompleted>
     </empl:employee>
</empl:employees>



--
View this message in context: http://freemarker.624813.n4.nabble.com/Beginner-question-Accessing-XML-Attributes-via-Template-tp626522p4655525.html
Sent from the freemarker-user mailing list archive at Nabble.com.

------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/