| <?xml version="1.0"?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <j:jelly xmlns:j="jelly:core" xmlns:test="jelly:junit" xmlns:x="jelly:xml"> |
| <x:parse var="nums"> |
| <a> |
| <b v="3"/> |
| <b v="2"/> |
| <b v="1"/> |
| <b v="11"/> |
| <b v="1.4"/> |
| <b v="1.2"/> |
| </a> |
| </x:parse> |
| |
| <x:parse var="strs"> |
| <a> |
| <b v="z"/> |
| <b v="g"/> |
| <b v="d"/> |
| <b v="a"/> |
| </a> |
| </x:parse> |
| |
| <x:parse var="deeper"> |
| <a> |
| <b><c><d>3<e>1</e></d></c></b> |
| <b><c><d>2<e>11</e></d></c></b> |
| <b><c><d>1</d></c></b> |
| <b><c><d>11</d></c></b> |
| </a> |
| </x:parse> |
| |
| <j:set var="result" value=""/> |
| <x:forEach select="$nums/a/b" var="x" sort="@v"> |
| <x:set var="num" select="$x/@v"/> |
| <j:set var="result" value="${result} ${num.get(0).getText()}"/> |
| </x:forEach> |
| ${result} |
| |
| <j:set var="result" value=""/> |
| <x:forEach select="$nums/a/b" var="x" sort="@v" descending="true"> |
| <x:set var="num" select="$x/@v"/> |
| <j:set var="result" value="${result} ${num.get(0).getText()}"/> |
| </x:forEach> |
| ${result} |
| |
| <j:set var="result" value=""/> |
| <x:forEach select="$nums/a/b" var="x" sort="@v" sortDataType="java.lang.String"> |
| <x:set var="num" select="$x/@v"/> |
| <j:set var="result" value="${result} ${num.get(0).getText()}"/> |
| </x:forEach> |
| ${result} |
| |
| <j:set var="result" value=""/> |
| <x:forEach select="$strs/a/b" var="x" sort="@v"> |
| <x:set var="str" select="$x/@v"/> |
| <j:set var="result" value="${result} ${str.get(0).getText()}"/> |
| </x:forEach> |
| ${result} |
| |
| <j:set var="result" value=""/> |
| <x:forEach select="$deeper/a/b" var="x" sort="c/d"> |
| <j:set var="result" value="${result} ${x.getStringValue()}"/> |
| </x:forEach> |
| ${result} |
| |
| <j:set var="result" value=""/> |
| <x:set var="rset" select="$nums/a/b" sort="@v"/> |
| <j:forEach var="num" items="${rset.iterator()}"> |
| <j:set var="result" value="${result} ${num.attributeValue('v')}"/> |
| </j:forEach> |
| ${result} |
| |
| <j:set var="result" value=""/> |
| <x:set var="rset" select="$nums/a/b"/> |
| <x:sort list="${rset}" sort="@v"/> |
| <j:forEach var="num" items="${rset.iterator()}"> |
| <j:set var="result" value="${result} ${num.attributeValue('v')}"/> |
| </j:forEach> |
| ${result} |
| |
| </j:jelly> |