Can XSLT do this?

Not the question that I asked before (using ^^), but this is another, which is like an even more noisy and seeded section. Anyway, I have a text file, its contents:

#HEADER# Version : 3 EOF : '^' EOR : '~' Property Count : 67 Generated Date : 10-March-2011 17:39 #DEFINITION# AGENT_REF^ADDRESS_1^ADDRESS_2^ADDRESS_3^ADDRESS_4^TOWN^POSTCODE1^POSTCODE2^FEATURE1^FEATURE2^FEATURE3^FEATURE4^FEATURE5^FEATURE6^FEATURE7^FEATURE8^FEATURE9^FEATURE10^SUMMARY^DESCRIPTION^BRANCH_ID^STATUS_ID^BEDROOMS^PRICE^PRICE_QUALIFIER^PROP_SUB_ID^UPDATE_DATE^CREATE_DATE^DISPLAY_ADDRESS^PUBLISHED_FLAG^LET_DATE_AVAILABLE^LET_BOND^LET_TYPE_ID^LET_FURN_ID^LET_RENT_FREQUENCY^TENURE_TYPE_ID^TRANS_TYPE_ID^NEW_HOME_FLAG^MEDIA_IMAGE_00^MEDIA_IMAGE_TEXT_00^MEDIA_IMAGE_01^MEDIA_IMAGE_TEXT_01^MEDIA_IMAGE_02^MEDIA_IMAGE_TEXT_02^MEDIA_IMAGE_03^MEDIA_IMAGE_TEXT_03^MEDIA_IMAGE_04^MEDIA_IMAGE_TEXT_04^MEDIA_IMAGE_05^MEDIA_IMAGE_TEXT_05^MEDIA_IMAGE_06^MEDIA_IMAGE_TEXT_06^MEDIA_IMAGE_07^MEDIA_IMAGE_TEXT_07^MEDIA_IMAGE_08^MEDIA_IMAGE_TEXT_08^MEDIA_IMAGE_09^MEDIA_IMAGE_TEXT_09^MEDIA_IMAGE_10^MEDIA_IMAGE_TEXT_10^MEDIA_IMAGE_11^MEDIA_IMAGE_TEXT_11^MEDIA_IMAGE_12^MEDIA_IMAGE_TEXT_12^MEDIA_IMAGE_13^MEDIA_IMAGE_TEXT_13^MEDIA_IMAGE_14^MEDIA_IMAGE_TEXT_14^MEDIA_IMAGE_15^MEDIA_IMAGE_TEXT_15^MEDIA_IMAGE_16^MEDIA_IMAGE_TEXT_16^MEDIA_IMAGE_17^MEDIA_IMAGE_TEXT_17^MEDIA_IMAGE_18^MEDIA_IMAGE_TEXT_18^MEDIA_IMAGE_19^MEDIA_IMAGE_TEXT_19^MEDIA_IMAGE_20^MEDIA_IMAGE_TEXT_20^MEDIA_IMAGE_21^MEDIA_IMAGE_TEXT_21^MEDIA_IMAGE_22^MEDIA_IMAGE_TEXT_22^MEDIA_IMAGE_23^MEDIA_IMAGE_TEXT_23^MEDIA_IMAGE_24^MEDIA_IMAGE_TEXT_24^MEDIA_IMAGE_25^MEDIA_IMAGE_TEXT_25^MEDIA_IMAGE_26^MEDIA_IMAGE_TEXT_26^MEDIA_IMAGE_27^MEDIA_IMAGE_TEXT_27^MEDIA_IMAGE_28^MEDIA_IMAGE_TEXT_28^MEDIA_IMAGE_29^MEDIA_IMAGE_TEXT_29^MEDIA_IMAGE_30^MEDIA_IMAGE_TEXT_30^MEDIA_IMAGE_31^MEDIA_IMAGE_TEXT_31^MEDIA_IMAGE_32^MEDIA_IMAGE_TEXT_32^MEDIA_IMAGE_33^MEDIA_IMAGE_TEXT_33^MEDIA_IMAGE_34^MEDIA_IMAGE_TEXT_34^MEDIA_IMAGE_35^MEDIA_IMAGE_TEXT_35^MEDIA_IMAGE_36^MEDIA_IMAGE_TEXT_36^MEDIA_IMAGE_37^MEDIA_IMAGE_TEXT_37^MEDIA_IMAGE_38^MEDIA_IMAGE_TEXT_38^MEDIA_IMAGE_39^MEDIA_IMAGE_TEXT_39^MEDIA_IMAGE_40^MEDIA_IMAGE_TEXT_40^MEDIA_IMAGE_60^MEDIA_IMAGE_TEXT_60^MEDIA_IMAGE_61^MEDIA_IMAGE_TEXT_61^MEDIA_FLOOR_PLAN_00^MEDIA_FLOOR_PLAN_TEXT_00^MEDIA_FLOOR_PLAN_01^MEDIA_FLOOR_PLAN_TEXT_01^MEDIA_FLOOR_PLAN_02^MEDIA_FLOOR_PLAN_TEXT_02^MEDIA_FLOOR_PLAN_03^MEDIA_FLOOR_PLAN_TEXT_03^MEDIA_FLOOR_PLAN_04^MEDIA_FLOOR_PLAN_TEXT_04^MEDIA_FLOOR_PLAN_05^MEDIA_FLOOR_PLAN_TEXT_05^MEDIA_DOCUMENT_00^MEDIA_DOCUMENT_TEXT_00^MEDIA_DOCUMENT_01^MEDIA_DOCUMENT_TEXT_01^MEDIA_DOCUMENT_02^MEDIA_DOCUMENT_TEXT_02^MEDIA_DOCUMENT_03^MEDIA_DOCUMENT_TEXT_03^MEDIA_DOCUMENT_04^MEDIA_DOCUMENT_TEXT_04^MEDIA_DOCUMENT_05^MEDIA_DOCUMENT_TEXT_05^MEDIA_DOCUMENT_06^MEDIA_DOCUMENT_TEXT_06^MEDIA_DOCUMENT_07^MEDIA_DOCUMENT_TEXT_07^MEDIA_DOCUMENT_08^MEDIA_DOCUMENT_TEXT_08^MEDIA_DOCUMENT_09^MEDIA_DOCUMENT_TEXT_09^MEDIA_DOCUMENT_10^MEDIA_DOCUMENT_TEXT_10^MEDIA_DOCUMENT_11^MEDIA_DOCUMENT_TEXT_11^MEDIA_DOCUMENT_12^MEDIA_DOCUMENT_TEXT_12^MEDIA_DOCUMENT_13^MEDIA_DOCUMENT_TEXT_13^MEDIA_DOCUMENT_14^MEDIA_DOCUMENT_TEXT_14^MEDIA_DOCUMENT_15^MEDIA_DOCUMENT_TEXT_15^MEDIA_DOCUMENT_16^MEDIA_DOCUMENT_TEXT_16^MEDIA_DOCUMENT_17^MEDIA_DOCUMENT_TEXT_17^MEDIA_DOCUMENT_18^MEDIA_DOCUMENT_TEXT_18^MEDIA_DOCUMENT_19^MEDIA_DOCUMENT_TEXT_19^MEDIA_DOCUMENT_20^MEDIA_DOCUMENT_TEXT_20^MEDIA_DOCUMENT_50^MEDIA_DOCUMENT_TEXT_50^MEDIA_DOCUMENT_51^MEDIA_DOCUMENT_TEXT_51^MEDIA_VIRTUAL_TOUR_00^MEDIA_VIRTUAL_TOUR_TEXT_00^~ #DATA# 12345_ALZ57065V^^Spacious 3 bedroom villa with pool in Vale da Telha^^^^8670-156^^^^^^^^^^^^3 bedrooms villa with pool located in picturesque urbanization of Vale da Telha, on a private corner plot. The villa benefits from all day sun shine. It has a mature settled garden with low maintenance and offers privacy for the villa. The villa comprises of living/dining room with wooden ceiling making the villa very welcoming. It has an open fireplace. The living room leads to the rustic yet modern kitchen, also on to the swimming pool area with BBQ and garden. Three bedrooms all with fitted wardrobes, (1 en suite) and wooden ceilings. All have good sun exposure, light and bright. The...^3 bedrooms villa with pool located in picturesque urbanization of Vale da Telha, on a private corner plot. The villa benefits from all day sun shine. It has a mature settled garden with low maintenance and offers privacy for the villa. The villa comprises of living/dining room with wooden ceiling making the villa very welcoming. It has an open fireplace. The living room leads to the rustic yet modern kitchen, also on to the swimming pool area with BBQ and garden. Three bedrooms all with fitted wardrobes, (1 en suite) and wooden ceilings. All have good sun exposure, light and bright. The detached garage has ample storage space in form of a mezzanine, plumbing for washing machine. Irrigation system. A/C that gives hot and cold air and dehumifies. Good investment for those looking for a permanent home.<br/><br/><br/>^12345^0^3^277000^0^^^^Spacious 3 bedroom villa with pool in Vale da Telha, Aljezur, 8670-156^1^^^^^^^1^N^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~ 12345_A184ALZ^^Lovely 2 bedroom apartment in Aljezur^^^Algarve^^^^^^^^^^^^^Excellent location for this well presented 2 bedroom apartment situated at the entrance of Aljezur. Within walking distance to all the attractions this portuguese village has to offer including many restaurants, shops and just few minutes drive to the fabulous Amoreira beach. The apartment comprises of a spacious lounge/dining room, 2 bedrooms with fitted wardrobes, fully fitted kitchen, bathroom and a possibility to occupy a 55 m2 area of the attic. Apart from the garage in cave there is a parking space provided which is an excellent asset in the summer months. This property is a perfect residental or holiday home as well having great rental potential.^Excellent location for this well presented 2 bedroom apartment situated at the entrance of Aljezur. Within walking distance to all the attractions this portuguese village has to offer including many restaurants, shops and just few minutes drive to the fabulous Amoreira beach. The apartment comprises of a spacious lounge/dining room, 2 bedrooms with fitted wardrobes, fully fitted kitchen, bathroom and a possibility to occupy a 55 m2 area of the attic. Apart from the garage in cave there is a parking space provided which is an excellent asset in the summer months. This property is a perfect residental or holiday home as well having great rental potential.<br/><br/><br/>^12345^0^2^140000^0^^^^Lovely 2 bedroom apartment in Aljezur, Aljezur, Algarve^1^^^^^^^1^N^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~ 

Is it possible using only XSLT (!) To generate an XML file, for example:

 <POST> <AGENT_REF>12345_ALZ57065V</AGENT_REF> <ADDRESS_2>Spacious 3 bedroom villa with pool in Vale da Telha</ADDRESS_2> ... </POST> <POST> <AGENT_REF>12345_A184ALZ</AGENT_REF> ... </POST> 

Basically, using the DEFINITION keywords (separated by the ^ character) to get the values ​​from DATA, which when spitted are displayed in the same order as the data in DEFINITION.

Thanks,

+4
source share
3 answers

Yes, maybe use <xsl:analyze-string> to convert non-XML data to XML.

+5
source

XSLT is used to transform XML. Since the first data patch you submitted is not XML, you cannot use XSLT for this.

If you want to go in the opposite direction, that would be possible.

UPDATE:

If you are using XSLT 2.0, refer to @Max Toro answer. Otherwise, this is correct.

+1
source

XSLT 1.0 is designed to convert XML to XML, text or HTML. Therefore, the input must be valid XML. Although this could be technically done in your example by including your input with some root xml tag (e.g. <root> ) and avoiding some characters (e.g. &lt; ), it still requires you to parse the lines in XSLT - for which XSLT is not intended. This is not impossible, but it will be very slow (and tedious to write).

You can first convert your input file to a valid xml (e.g. with perl, awk, sed, python, ...) to get something like:

 <root> <definition> <item>AGENT_REF</item> <item>ADDRESS_1</item> <item>ADDRESS_2</item> ... </definition> <data> <line> <item>12345_ALZ57065V</item> <item/> <!-- important! --> <item>Spacious 3 bedroom villa with pool in Vale da Telha</item> <item/> ... </line> <line> ... </line> ... </data> </root> 

and then converted it with XSLT to the desired result.

OTOH, when data is already being processed by a string processing language (like perl), its only very small extra step is to directly create the desired XML without using XSLT at all.

-1
source

All Articles