[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Copying image files from one directory to another - using xslt


Subject: Re: [xsl] Copying image files from one directory to another - using xslt
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Tue, 15 Sep 2009 07:21:44 -0700

At 2009-09-15 19:36 +0530, Amit Panwar wrote:
1). I want to copy some image files (jpeg, gif etc) from one directory to another directory.
e.g If I have following element in source xml
<image src="images/img123.jpg"> </image>


And I want to transform this element into
<file type="image" src="resources/images/img123.jpg"> </file>

Xslt makes everything easy in above transformation, but i don't know how do I copy 'img123.jpg' from 'images' directory to 'resources/images' directory.

Standard XSLT does not provide a way of doing this for binary files because the data model only contains characters that are allowed in XML. For XML 1.0 there is a limited number of control characters (characters below U+0020), but even for XML 1.1 the NUL (U+0000) is still not available. For simple text files or HTML files I have successfully used XSLT 2 xsl:result-document, unparsed-text() and disable-output-escaping= to copy from one location to another.


2). In another transformation I'm reading a html files using unparsed-text() function, now html data can have any number of 'img' tags.

unparsed-text() does not give you any element structure ... it only gives you a single text node in the data model. Any angle brackets found in the text file are not considered markup, only text. Hence the name "unparsed text" because the text you get is not parsed for markup.


I want to use a loop to check all 'img' tags and want to change value of src attribute of each img tag - via string manipulation.

Here is a example java code what i want to achieve in xslt.

The XPath data model on which XSLT is built does not give you the kind of information from an HTML file you are asking for.


String htmlData; // varibale htmlData will have html contents of a files

while(htmlData.indexOf("img") != -1){
Do some processing then replace the value of src attribute then take a substring of html data to remove current img tag.
htmlData = htmlData.substring(htmlData.indexOf("img")+3);
}

You would need to use something like <xsl:analyze-string> very labouriously in order to do the kind of manipulation you need to do.


Are above two tasks doable in xslt?

Not at all easily, because XSLT is the wrong tool for manipulating HTML ... it is suited for XHTML.


Have you considered converting HTML to XHTML using Tidy? Then it would become a simple XSLT transformation because your input would then be XML.

I hope this helps.

. . . . . . . . . . . Ken

--
Upcoming hands-on code list, UBL, XSLT, XQuery and XSL-FO classes.
Interested in other classes?  http://www.CraneSoftwrights.com/s/i/
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
Video lesson:    http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
Video overview:  http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal


Current Thread