Sort based on attribute values
Here should go questions about transforming XML with XSLT and FOP.
-
- Posts: 6
- Joined: Mon Oct 17, 2005 5:45 pm
- Location: Switzerland
Sort based on attribute values
Post by Iwan Jauch »
Hi everybody
I have a problem to sort my xml document. I would like to sort the document based on the attribute value of the attribute "Code department". What is the problem?
I can create an new document but it is empty.
XML-Document:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="styles.xslt"?>
<Request xmlns="newsalesorder">
<Parameters Method="NewSalesOrder">
<Order Service="0" DocumentType="Order">
<OrderFields>
<Field Name="Sell-to Customer No.">150649</Field>
<Field Name="Your Reference">TEST</Field>
<Field Name="External Document No.">20050514</Field>
</OrderFields>
<Lines>
<LineFields Type="Item">
<Field Name="No.">273080</Field>
<Field Name="Quantity">1</Field>
<Field Name="Code Department">2</Field>
</LineFields>
</Lines>
<Lines>
<LineFields Type="Item">
<Field Name="No.">273081</Field>
<Field Name="Quantity">1</Field>
<Field Name="Code Department">1</Field>
</LineFields>
</Lines>
</Order>
</Parameters>
</Request>
XSLT-Document:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="Request/Parameters/Order/Lines/LineFields/Field">
<xsl:sort select="Field/@Name = Code Department" order="ascending" />
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
Thanks a lot for your help.
Greetings Iwan
I have a problem to sort my xml document. I would like to sort the document based on the attribute value of the attribute "Code department". What is the problem?
I can create an new document but it is empty.
XML-Document:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="styles.xslt"?>
<Request xmlns="newsalesorder">
<Parameters Method="NewSalesOrder">
<Order Service="0" DocumentType="Order">
<OrderFields>
<Field Name="Sell-to Customer No.">150649</Field>
<Field Name="Your Reference">TEST</Field>
<Field Name="External Document No.">20050514</Field>
</OrderFields>
<Lines>
<LineFields Type="Item">
<Field Name="No.">273080</Field>
<Field Name="Quantity">1</Field>
<Field Name="Code Department">2</Field>
</LineFields>
</Lines>
<Lines>
<LineFields Type="Item">
<Field Name="No.">273081</Field>
<Field Name="Quantity">1</Field>
<Field Name="Code Department">1</Field>
</LineFields>
</Lines>
</Order>
</Parameters>
</Request>
XSLT-Document:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="Request/Parameters/Order/Lines/LineFields/Field">
<xsl:sort select="Field/@Name = Code Department" order="ascending" />
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
Thanks a lot for your help.
Greetings Iwan
-
- Site Admin
- Posts: 2095
- Joined: Thu Jan 09, 2003 2:58 pm
Hi Iwan,
The first problem is that you need to use a prefix in the XPath expressions in your stylesheet to refer to elements from a specified namespace, and you specified a default namespace for your XML document. There are also a few other problems in the way you set the sort criteria, the working sample below may help you:
Best Regards,
George
The first problem is that you need to use a prefix in the XPath expressions in your stylesheet to refer to elements from a specified namespace, and you specified a default namespace for your XML document. There are also a few other problems in the way you set the sort criteria, the working sample below may help you:
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:nso="newsalesorder" exclude-result-prefixes="nso"
>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<result>
<xsl:apply-templates
select="nso:Request/nso:Parameters/nso:Order/nso:Lines/nso:LineFields/nso:Field[@Name='Code Department']">
<xsl:sort select="." order="ascending"/>
</xsl:apply-templates>
</result>
</xsl:template>
<xsl:template match="nso:Field">
[<xsl:value-of select="../nso:Field[@Name='No.']"/>: <xsl:value-of select="."/>]
</xsl:template>
</xsl:stylesheet>
George
-
- Posts: 6
- Joined: Mon Oct 17, 2005 5:45 pm
- Location: Switzerland
Post by Iwan Jauch »
Thanks for your help George !
I tryed it out and it worked!
The output is at the moment a html file.
What can I do, that the output file look the same as the input xml file just sorted in an oder way? Do you have any ideas?
Thank for your help
Greetings Iwan
I tryed it out and it worked!
The output is at the moment a html file.
What can I do, that the output file look the same as the input xml file just sorted in an oder way? Do you have any ideas?
Thank for your help
Greetings Iwan
-
- Posts: 6
- Joined: Mon Oct 17, 2005 5:45 pm
- Location: Switzerland
Post by Iwan Jauch »
Hi everybody
I tried out this version but it doesn't work! I receive an XML-Document as output but the sorting doesn't work anymore!
Does anybody know where the problem is?
Thanks a lot for your help
Greetings Iwan
[code]<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:nso="newsalesorder" exclude-result-prefixes="nso"
>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" >
<xsl:sort select="nso:Request/nso:Parameters/nso:Order/nso:Lines/nso:LineFields/nso:Field[@Name='Code Department']" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
[/code]
I tried out this version but it doesn't work! I receive an XML-Document as output but the sorting doesn't work anymore!
Does anybody know where the problem is?
Thanks a lot for your help
Greetings Iwan
[code]<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:nso="newsalesorder" exclude-result-prefixes="nso"
>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" >
<xsl:sort select="nso:Request/nso:Parameters/nso:Order/nso:Lines/nso:LineFields/nso:Field[@Name='Code Department']" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
[/code]
-
- Site Admin
- Posts: 2095
- Joined: Thu Jan 09, 2003 2:58 pm
Hi Iwan,
Something like below may do what you want:
Best Regards,
George
Something like below may do what you want:
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:nso="newsalesorder" exclude-result-prefixes="nso">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="nso:Order">
<xsl:copy>
<xsl:apply-templates select="nso:OrderFields"/>
<xsl:apply-templates select="nso:Lines">
<xsl:sort select="nso:LineFields/nso:Field[@Name='Code Department']"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
George
-
- Posts: 6
- Joined: Mon Oct 17, 2005 5:45 pm
- Location: Switzerland
Post by Iwan Jauch »
Hi George
Thank very very mutch for your help. It is working!!!!
Thanks and have a nice day
Best regards
Iwan
Thank very very mutch for your help. It is working!!!!
Thanks and have a nice day
Best regards
Iwan
-
- Posts: 6
- Joined: Mon Oct 17, 2005 5:45 pm
- Location: Switzerland
Post by Iwan Jauch »
Hi everybody
I have a small problem with the sort tag! My XML file changed and I have to change my stylesheet but I have not really an idee what to change!
Please can anybody help me? This is my new XML File and I still use the same stylesheet:
XML Document:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="styles.xsl"?>
<Request xmlns="http://www.mga.ch/navision/newsalesorder">
<Parameters Method="NewSalesOrder">
<Order Service="0">
<OrderFields>
<Field Name="Sell-to Customer No.">150649</Field>
<Field Name="Your Reference">Webshop </Field>
<Field Name="External Document No.">20050514</Field>
</OrderFields>
<Lines>
<LineFields Type="Item">
<Field Name="No.">101045</Field>
<Field Name="Quantity">1</Field>
<Field Name="Code Department">1</Field>
</LineFields>
<LineFields Type="Item">
<Field Name="No.">5530 BH</Field>
<Field Name="Quantity">3</Field>
<Field Name="Code Department">2</Field>
</LineFields>
<LineFields Type="Item">
<Field Name="No.">273080</Field>
<Field Name="Quantity">1</Field>
<Field Name="Code Department">1</Field>
</LineFields>
</Lines>
</Order>
</Parameters>
</Request>
Stylesheet from George (see above)
PS: does anybody knows a good book about xsl?
Thanks a lot for your help
Best Regards Iwan
I have a small problem with the sort tag! My XML file changed and I have to change my stylesheet but I have not really an idee what to change!
Please can anybody help me? This is my new XML File and I still use the same stylesheet:
XML Document:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="styles.xsl"?>
<Request xmlns="http://www.mga.ch/navision/newsalesorder">
<Parameters Method="NewSalesOrder">
<Order Service="0">
<OrderFields>
<Field Name="Sell-to Customer No.">150649</Field>
<Field Name="Your Reference">Webshop </Field>
<Field Name="External Document No.">20050514</Field>
</OrderFields>
<Lines>
<LineFields Type="Item">
<Field Name="No.">101045</Field>
<Field Name="Quantity">1</Field>
<Field Name="Code Department">1</Field>
</LineFields>
<LineFields Type="Item">
<Field Name="No.">5530 BH</Field>
<Field Name="Quantity">3</Field>
<Field Name="Code Department">2</Field>
</LineFields>
<LineFields Type="Item">
<Field Name="No.">273080</Field>
<Field Name="Quantity">1</Field>
<Field Name="Code Department">1</Field>
</LineFields>
</Lines>
</Order>
</Parameters>
</Request>
Stylesheet from George (see above)
PS: does anybody knows a good book about xsl?
Thanks a lot for your help
Best Regards Iwan
-
- Site Admin
- Posts: 2095
- Joined: Thu Jan 09, 2003 2:58 pm
Hi Iwan,
You can find good XSLT books on our Resources/Books section:
http://www.oxygenxml.com/xml_books.html
You changed the namespace on the source document and the structure. The adjusted stylesheet is below:
Best Regards,
George
You can find good XSLT books on our Resources/Books section:
http://www.oxygenxml.com/xml_books.html
You changed the namespace on the source document and the structure. The adjusted stylesheet is below:
Code: Select all
<?xml version="1.1" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:nso="http://www.mga.ch/navision/newsalesorder" exclude-result-prefixes="nso">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="nso:Lines">
<xsl:copy>
<xsl:apply-templates select="nso:LineFields">
<xsl:sort select="nso:Field[@Name='Code Department']"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
George
-
- Posts: 6
- Joined: Mon Oct 17, 2005 5:45 pm
- Location: Switzerland
Post by Iwan Jauch »
Hi George
Thanks very very mutch for your great help. Everything is working wonderful!
Have a nice day
Best regards,
Iwan
Thanks very very mutch for your great help. Everything is working wonderful!
Have a nice day
Best regards,
Iwan
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service