Re: [xsl] XPath expression to convert XSD enumerations into a regex, longest value first

Subject: Re: [xsl] XPath expression to convert XSD enumerations into a regex, longest value first
From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 7 Jul 2022 17:37:38 -0000
On 07.07.2022 19:02, Roger L Costello costello@xxxxxxxxx wrote:

I have an XSD simpleType with enumeration values:


<xsd:simpleType name="RunwayLightingType">
   <xsd:restriction base="xsd:string">
    <xsd:enumeration value="1"/>
    <xsd:enumeration value="2"/>
    <xsd:enumeration value="3"/>
    <xsd:enumeration value="4"/>
    <xsd:enumeration value="5"/>
    <xsd:enumeration value="6"/>
    <xsd:enumeration value="7"/>
    <xsd:enumeration value="8"/>
    <xsd:enumeration value="9"/>
    <xsd:enumeration value="10"/>
    <xsd:enumeration value="11"/>
    <xsd:enumeration value="12"/>
   </xsd:restriction>
  </xsd:simpleType>

I want to turn the values into a regex such that the longest value (not the
biggest value, the string longest value) is listed first:

12|11|10|9|8|7|6|5|4|3|2|1


Seems like a simple problem, right? Should have a simple solution, right?

Well, I devised a solution, but it sure ain't simple.

string-join(for $i in reverse(sort(xs:restriction/xs:enumeration, (),
function($enum) {string-length($enum/@value )})) return $i/@value, '|')

Is there is a simpler XPath expression to solve this problem?


Is 12 longer than 11 or 10?



As for simpler, the ! and => operators are supposed to allow for more
compact and easier to read expressions.

Current Thread