XSLT problem

Post Reply
LasseThid
Advanced member
Posts: 353
Joined: Tue Mar 03, 2015 2:30 pm
Location: Molndal, Sweden

XSLT problem

Post by LasseThid »

I'm trying to create a new xml file from an xml file, but I'm having a bit of a problem.

What I have is this, which is an xml created by ConnectAll:

Code: Select all

<?xml version='1.0' encoding='UTF-8'?>
<field-list>
 <field>
  <tag>Ordernummer</tag>
  <type>string</type>
  <required>true</required>
  <value>P234567</value>
 </field>
 <field>
  <tag>PDF-korr</tag>
  <type>boolean</type>
  <value>true</value>
  <field-list>
   <field>
    <tag>Korrtyp</tag>
    <type>choice</type>
    <value>Digitalt korrektur via länk</value>
   </field>
   <field>
    <tag>E-postadress</tag>
    <type>string</type>
    <required>true</required>
    <value>lasse.thid@bredband.net</value>
   </field>
  </field-list>
 </field>
 <field>
  <tag>Offsetjobb</tag>
  <type>boolean</type>
  <value>true</value>
  <field-list>
   <field>
    <tag>Tryck</tag>
    <type>choice</type>
    <value>Bestruket CMYK</value>
   </field>
  </field-list>
 </field>
 <field>
  <tag>Handläggare</tag>
  <type>choice</type>
  <value>carina.persson@billes.se</value>
 </field>
 <field>
  <tag>Preflight status</tag>
  <type>choice</type>
  <value>Pass</value>
 </field>
 <field>
  <tag>Sign-off</tag>
  <type>choice</type>
  <value>No</value>
 </field>
</field-list>
What I would like to do is to change this into a new xml file looking like this:

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<job>
	<ordernummer>P234567</ordernummer>
	<PDF-korr>true</PDF-korr>
	<Korrtyp>Digitalt korrektur via länk</Korrtyp>
	<E-postadress>lasse.thid@bredband.net</E-postadress>
	<Offsetjobb>true</Offsetjobb>
	<Tryck>Bestruket CMYK</Tryck>
	<Handläggare>carina.persson@billes.se</Handläggare>
</job>
I was browsing the internet and re-read a post from loicaigon which gave me an idea that I could output it to an xml using this xslt:

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="UTF-8" indent="yes" method="xml"/>
    <xsl:template match="/">
<xsl:text><job><ordernummer></xsl:text>
<xsl:value-of-select=”//[tag=’Ordernummer’]/value”/>
<xsl:text></ordernummer><pdf-korr>
</xsl:text>
<xsl:value-of-select=”//[tag=’PDF-korr’]/value”/>
<xsl:text></pdfkorr><korrtyp>
</xsl:text>
<xsl:value-of-select=”//[tag=’Korrtyp’]/value”/>
<xsl:text></korrtyp><e-postadress>
</xsl:text>
<xsl:value-of-select=”//[tag=’E-postadress’]/value”/>
<xsl:text></e-postadress><offsetjobb>
</xsl:text>
<xsl:value-of-select=”//[tag=’Offsetjobb’]/value”/>
<xsl:text></offsetjobb><tryck>
</xsl:text>
<xsl:value-of-select=”//[tag=’Tryck’]/value”/>
<xsl:text></tryck><csr>
</xsl:text>
<xsl:value-of-select=”//[tag=’Handläggare’]/value”/>
<xsl:text></csr></job>
    </xsl:template>
</xsl:stylesheet>
However, when I look at that with XMLSpear I get an error saying that I need to terminate the element <ordernummer>. I'm guessing that I can't put an <xsl:value-of-select/> between <ordernummer> and </ordernummer>. My idea was to add the tags as text and then add the value using the <xsl:value-of-select/>
Any suggestions on how to achieve what I'm after?
Enfocus Switch, Enfocus PitStop Server, Enfocus PDF Review, HP SmartStream& Kodak Prinergy with RBA
Offset 72x102, Offset Large Format, Digital Large Format and Digital print.
loicaigon
Advanced member
Posts: 362
Joined: Wed Jul 10, 2013 10:22 am

Re: XSLT problem

Post by loicaigon »

hello,

This should work :

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="1.0">
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <job>
            <ordernummer>
                <xsl:value-of select="//value[parent::node()/tag='Ordernummer']"/>
            </ordernummer>
            <PDF-korr>
                <xsl:value-of select="//value[parent::node()/tag='PDF-korr']"/>
            </PDF-korr>
            <Korrtyp>
                <xsl:value-of select="//value[parent::node()/tag='Korrtyp']"/>
            </Korrtyp>
            <E-postadress>
                <xsl:value-of select="//value[parent::node()/tag='E-postadress']"/>
            </E-postadress>
            <Offsetjobb>
                <xsl:value-of select="//value[parent::node()/tag='Offsetjobb']"/>
            </Offsetjobb>
            <Tryck>
                <xsl:value-of select="//value[parent::node()/tag='Tryck']"/>
            </Tryck>
            <Handläggare>
                <xsl:value-of select="//value[parent::node()/tag='Handläggare']"/>
            </Handläggare>
        </job>
    </xsl:template>
</xsl:stylesheet>
LasseThid
Advanced member
Posts: 353
Joined: Tue Mar 03, 2015 2:30 pm
Location: Molndal, Sweden

Re: XSLT problem

Post by LasseThid »

Thanks loicaigon!

Much appreciated!
Enfocus Switch, Enfocus PitStop Server, Enfocus PDF Review, HP SmartStream& Kodak Prinergy with RBA
Offset 72x102, Offset Large Format, Digital Large Format and Digital print.
loicaigon
Advanced member
Posts: 362
Joined: Wed Jul 10, 2013 10:22 am

Re: XSLT problem

Post by loicaigon »

My XSLT pleasure ;)
jan_suhr
Advanced member
Posts: 586
Joined: Fri Nov 04, 2011 1:12 pm
Location: Nyköping, Sweden

Re: XSLT problem

Post by jan_suhr »

Here is a simpler one :)

Note that this one is for XLST 2.0 to be used with for example Saxon

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
	<xsl:output encoding="UTF-8" indent="yes" method="xml"/>
	<xsl:template match="/">
		<job>
			<ordernummer>
				<xsl:value-of select="//field[tag='Ordernummer']/value"/>
			</ordernummer>
			<pdfkorr>
				<xsl:value-of select="//field[tag='PDF-korr']/value"/>
			</pdfkorr>
			<korrtyp>
				<xsl:value-of select="//field[tag='Korrtyp']/value"/>
			</korrtyp>
			<e-postadress>
				<xsl:value-of select="//field[tag='E-postadress']/value"/>
			</e-postadress>
			<offsetjobb>
				<xsl:value-of select="//field[tag='Offsetjobb']/value"/>
			</offsetjobb>
			<tryck>
				<xsl:value-of select="//field[tag='Tryck']/value"/>
			</tryck>
			<csr>
				<xsl:value-of select="//field[tag='Handläggare']/value"/>
			</csr>
		</job>
	</xsl:template>
</xsl:stylesheet>
Jan
Jan Suhr
Color Consult AB
Sweden
=============
Check out my apps
loicaigon
Advanced member
Posts: 362
Joined: Wed Jul 10, 2013 10:22 am

Re: XSLT problem

Post by loicaigon »

Hi @jan_suhr,

I think your xslt code would be perfectly fine in XSLT 1.0 unless I am wrong.

Best regards
Post Reply