[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] XML 2 CSV using XLS with HTML-Tags inside + double quo
Hello @ all,
first: excuse me for my bad english - i hope you will understand me ;-). It's been a while ago since i wrote a longer text ^^. Now it's 2 years ago since i was working with XSLT and XML - but the last week i mostly got back into it. My profession is more XHTML + CSS. To the problem: - i read the FAQ (all the FAQ's i found) - used searchengines to solve my "little" problem. There are two systems. AuktionMaster and Yatego. Our products are listed in the Database of AuktionMaster. Now i want to get them to another marketplace > Yatego. There's an option to generate a Eport-Format using XSL. With this XSL i can generate a CSV File. I need this CSV file, because Yatego only imports ;-separated CSV-Files. Ok - i thought - no problem. Well it's frustrating :-(. My XSL: <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text" media-type="text/comma-separated-values" version="1.0" indent="yes" encoding="ISO-8859-1" /> <!-- this must be meinly correct i think --> <!-- fields needed --> <xsl:template match="/"> <xsl:text>foreign_id;article_nr;title;tax;price;price_uvp;price_purchase;tax_differential;basic_price;units;delivery_surcharge;delivery_calc_once;short_desc;long_desc;url;auto_linefeet;picture;picture2;picture3;picture4;picture5;categories;variants;discount_set_id;stock;delivery_date;cross_selling;delitem;status;top_offer</xsl:text> <xsl:text>
</xsl:text> <xsl:apply-templates select="export/item"/> </xsl:template> <xsl:template match="export/item"> <xsl:choose> <xsl:when test="inventory_active='1'"><!-- i check if product is set flag active --> ... now i catch the fields needed with the fields from the source <xsl:value-of select="item_id" /> <!-- for example product number --> <xsl:text>;</xsl:text> ... well, i've got the field names from an other XSL inside of that back-end. So i don't know which version/processor of XSL they use (sorry) .... ok - i get the fields mainly by <xsl:value-of select="name" /> Now we came to the product description, which is stored with HTML inside the DB. If i use <xsl:value-of select="description_table/description" disable-output-escaping="yes" /> the HTML Code with instyle CSS <p style="font: 9pt Arial, sans-serif;">This Product is ...</p> and a lot other HTML Tags like <div>, <img>, <ul> ... is breaking inside the CSV-File on the place of the ";" (semicolon). Viewing the file with Excel one part of the HTML Code is inside the field "long_desc" an the rest inside the other fields. So the CSV-File is not correct. Nearby with method="text" disable-output-escaping="yes" is not working (i read it in the FAQ). Then i found a lot of Tepmplates how to get the HTML Code inside this one field through escaping quotes. So i used <xsl:text>"</xsl:text> <xsl:apply-templates select="description_table/description" mode="escape-CSV" /> <xsl:text>"</xsl:text> <xsl:text>;</xsl:text> ... rest of the XSL: <xsl:text></xsl:text> <xsl:text>;</xsl:text> <xsl:text>
</xsl:text><!-- line break here --> </xsl:when> </xsl:choose> </xsl:template> Here's the Template for escaping the quotes. It worked. But now it doesn't. I don't know why. I never changed it. It's like i found it on the net. <xsl:template match="node()" mode="escape-CSV" name="escape-CSV"> <xsl:param name="string" select="." /> <xsl:choose> <xsl:when test="contains($string, '"')"> <xsl:value-of select="substring-before($string, '"')" /> <xsl:text>\"</xsl:text> <xsl:call-template name="escape-CSV"> <xsl:with-param name="string" select="substring-after($string, '"')" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$string" /> </xsl:otherwise> </xsl:choose> </xsl:template> Ok i know i'll get it back to work - but the main problem is is: After escaping the html-code it shows inside the CSV <p> ... . Because the CSV is going to be importet in Yatego i need to replace the field (string) and get the < and > back. So i tried and tried. And i didn't get it. I know the problem isn't much big - but i need the "Aaaaaah"-Effect to go on :-). Here is one of the ideas i tried: 1. <xsl:template match="node()" mode="escape_special_characters" name="escape_special_characters"> <xsl:param name="input_text" select="." /> <!-- http://www.w3schools.com/xsl/el_param.asp --> <xsl:variable name="step_1"> <xsl:call-template name="replace_quot"> <xsl:with-param name="input_text" select="." /> </xsl:call-template> </xsl:variable> <xsl:value-of select="$step_1" /> </xsl:template> 2. <xsl:template name="replace_lt"> <xsl:param name="input_text" /> <xsl:param name="special_char" /> <xsl:choose> <xsl:when test="contains($input_text, $special_char)"> <xsl:value-of select="substring-before($input_text, $special_char)" /> <xsl:text><</xsl:text> <xsl:value-of select="$special_char" /> <xsl:call-template name="replace_lt"> <xsl:with-param name="input_text" select="substring-after($input_text, $special_char)" /> <xsl:with-param name="special_char" select="$special_char" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$input_text" /> </xsl:otherwise> </xsl:choose> </xsl:template> ... I think my main problem is not the recursive part it's the basic part of calling the template: <xsl:apply-templates select="description_table/description" mode="escape-CSV" /> I don't know how to get all the templates to work or how correctly to call them for: - 1. double quote the HTML-Code to get something linke "&lgt;p> ... " - 2. replace < with < and > with > to get correct HTML Code inside the CSV - 3. to import the CSV into Yatego to get the product description displayed correctly in the browser. Thank you all very very much for all kind of help. Greetings Eddie
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|