Wednesday, 15 July 2015

java - Save data from XSLT generated from to an XML file -



java - Save data from XSLT generated from to an XML file -

i have problem while trying save info xml using xslt. problem seems ok, no exceptions thrown, log files clean, can't see changes in xml file. , can't here code saving output file

transformer transformer = xsltemplatespool.gettransformer(save_item, realpath); setcategoryandsubcateory(transformer, request); string name = request.getparameter(name); /*retrieving more parameters*/ string cost = request.getparameter(price); transformer.setparameter(name, name); /*...*/ transformer.setparameter(xml_path, "e:/xslt/webcontent/xml/shop.xml"); if (price == null) { cost = ""; } transformer.setparameter(price, price); if (notinstock == null) { notinstock = ""; } /* * out instance of printwriter * printwriter out = httpservletresponse.getwriter() */ transformer.setparameter(not_in_stock, notinstock); executewrite(out, readwritelock, transformer); protected void executewrite(printwriter out, readwritelock readwritelock, transformer transformer) throws handledexception { source xmlsource = new streamsource("e:/xslt/webcontent/xml/shop.xml"); streamresult result = new streamresult(out); lock writelock = readwritelock.writelock(); writelock.lock(); seek { transformer.transform(xmlsource, result); } grab (transformerexception e) { exceptionhandler.logandthrow(e, logger); } { writelock.unlock(); } }

from xslt-generated form additem (every peace of infomation need comes nice , smooth @ stage) retreve info , seek add together xml file using template saveitem

<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:xs="http://www.example.org/products" xmlns:redirect="http://xml.apache.org/xalan/redirect" extension-element-prefixes="redirect" xmlns:validation="xalan://com.xslt.util.validator" exclude-result-prefixes="validation redirect"> <xsl:import href="additem.xsl" /> <xsl:import href="productslist.xsl" /> <xsl:param name="categoryname" /> <xsl:param name="subcategoryname" /> <xsl:param name="name" /> <xsl:param name="producer" /> <xsl:param name="model" /> <xsl:param name="date-of-issue" /> <xsl:param name="color" /> <xsl:param name="not-in-stock" /> <xsl:param name="price" /> <xsl:param name="xmlpath"/> <xsl:param name="isvalid" select="validation:validate($name, $producer, $model, $date-of-issue, $color, $price, $not-in-stock)" /> <xsl:param name="nameerror" select="validation:getnameerror()" /> <xsl:param name="producererror" select="validation:getproducererror()" /> <xsl:param name="modelerror" select="validation:getmodelerror()" /> <xsl:param name="dateerror" select="validation:getdateerror()" /> <xsl:param name="priceerror" select="validation:getpriceerror()" /> <xsl:param name="colorerror" select="validation:getcolorerror()" /> <xsl:template match="/" priority="2"> <xsl:choose> <xsl:when test="not($isvalid)"> <xsl:call-template name="additem"> <xsl:with-param name="nameerror" select="$nameerror" /> <xsl:with-param name="producererror" select="$producererror" /> <xsl:with-param name="modelerror" select="$modelerror" /> <xsl:with-param name="dateerror" select="$dateerror" /> <xsl:with-param name="priceerror" select="$priceerror" /> <xsl:with-param name="colorerror" select="$colorerror" /> <xsl:with-param name="not-in-stock" select="$not-in-stock" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <redirect:write select="$xmlpath"> <xsl:call-template name="saveitem" /> </redirect:write> <xsl:call-template name="returntoproducts" /> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="saveitem" match="@*|node()" priority="2"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> </xsl:copy> </xsl:template> <xsl:template match="/xs:shop/xs:category[@name=$categoryname]/xs:subcategory[@name=$subcategoryname]"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> <xsl:element name="xs:product"> <xsl:attribute name="name"> <xsl:value-of select="$name" /> </xsl:attribute> <xsl:attribute name="producer"> <xsl:value-of select="$producer" /> </xsl:attribute> <xsl:attribute name="model"> <xsl:value-of select="$model" /> </xsl:attribute> <xsl:element name="xs:date-of-issue"> <xsl:value-of select="$date-of-issue" /> </xsl:element> <xsl:element name="xs:color"> <xsl:value-of select="$color" /> </xsl:element> <xsl:choose> <xsl:when test="$not-in-stock"> <xsl:element name="xs:not-in-stock" /> </xsl:when> <xsl:otherwise> <xsl:element name="xs:price"> <xsl:value-of select="$price" /> </xsl:element> </xsl:otherwise> </xsl:choose> </xsl:element> </xsl:copy> </xsl:template> <xsl:template name="returntoproducts"> <html> <head> <meta http-equiv="refresh" content="0;url=controller.do?command=productslist&amp;categoryname={$categoryname}&amp;subcategoryname={$subcategoryname}" /> </head> </html> </xsl:template> </xsl:stylesheet>

example of xml file

<xs:shop xmlns:xs="http://www.example.org/products" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.example.org/products shop.xsd"> <xs:category name="bicycle"> <xs:subcategory name="frame"> <xs:product name="soda fr" producer="ns" model="fr445"> <xs:date-of-issue>10-05-2012</xs:date-of-issue> <xs:color>white</xs:color> <xs:price>520$</xs:price> </xs:product> <xs:product name="nucleon" producer="nicolai" model="nc428"> <xs:date-of-issue>10-05-2012</xs:date-of-issue> <xs:color>dark grey</xs:color> <xs:not-in-stock/> </xs:product> </xs:subcategory> </xs:category> </xs:shop>

so... made it. still there little bug

systemid unknown; line #-1; column #-1; premature end of file.

but hope 1 not hard fix. can see below output stream written stringwriter, , stringwriter written xml file. still can't understand why there no result (file cleared) if pass file streamresult. may hands growing out of wrong place. may i'll create little research tomorrow.

so, method executewrite(...) changed lot

protected void executewrite(printwriter out, readwritelock readwritelock, transformer transformer) throws handledexception { lock readlock = readwritelock.readlock(); stringwriter outwriter = new stringwriter(); transformer t = null; seek { readlock.lock(); streamsource xmlstream = new streamsource(/*path xml*/); t = transformer; t.transform(xmlstream, new streamresult(outwriter)); } grab (transformerexception e) { exceptionhandler.logandthrow(e, logger); } { readlock.unlock(); } lock writelock = readwritelock.writelock(); filewriter filewriter = null; seek { writelock.lock(); filewriter = new filewriter(new file(/*path xml*/)); filewriter.write(outwriter.tostring()); } grab (ioexception e) { exceptionhandler.logandthrow(e, logger); } { if (filewriter != null) { seek { filewriter.close(); } grab (ioexception e) { exceptionhandler.logandthrow(e, logger); } } writelock.unlock(); } }

java xml xslt xalan

No comments:

Post a Comment