简体   繁体   中英

How to do the equivalent of XSLT2.0 Matches in XSLT1.0

With the help of a few posts I have been putting together an XSLT and finally got it to work. I've now found out the processor is only XSLT1.0 compliant which means my XSLT will not work as it contains the matches function in the select of the template.

I've had a few goes at trying to recreate it but not really having much luck replacing this section with 1.0 syntax. I either end up with the wrong loop or too much of the wrong thing.

<xsl:for-each select="../../../*[matches(name(),'^vco_.*')]/text()">
<xsl:value-of select="concat(.,'-')"/>
</xsl:for-each>

I thought I might have to do something like the following (that doesn't work) or use a function but can't get anything looking right.

<xsl:for-each select="/exchange/vco/vco.srs/vco_crsc.vco.srs">
<xsl:value-of select="  ancestor-or-self::node()"/>            
<xsl:value-of select="concat(.,'-')"/>
</xsl:for-each>

Present code and out put follows

XML in

<?xml version="1.0" encoding="UTF-8" ?>
<exchange>
<vco>
<vco.srs>
<vco_crsc.vco.srs>BUUBIF</vco_crsc.vco.srs>
<vco_prgc.vco.srs>BUBSBAT02</vco_prgc.vco.srs>
<vco_rouc.vco.srs>USBIFI</vco_rouc.vco.srs>
<cbo>
<cbo.srs>
<cbo_occl.cbo.srs>AJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>AJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>AJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>AJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>FJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>AJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>FJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
</cbo>
</vco.srs>
<vco.srs>
<vco_crsc.vco.srs>BUUBIF</vco_crsc.vco.srs>
<vco_prgc.vco.srs>BUBSBAT02</vco_prgc.vco.srs>
<vco_rouc.vco.srs>USBIFA</vco_rouc.vco.srs>
<cbo>
<cbo.srs>
<cbo_occl.cbo.srs>AJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>AJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>AJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>AJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>FJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>AJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
<cbo.srs>
<cbo_occl.cbo.srs>FJ</cbo_occl.cbo.srs>
<crs>
<crs.srs>
<crs_titl.crs.srs>BSc Banking &amp; Int Finance</crs_titl.crs.srs>
<crs_dptc.crs.srs>B</crs_dptc.crs.srs>
<crs_begd.crs.srs>2003-08-01</crs_begd.crs.srs>
</crs.srs>
</crs>
</cbo.srs>
</cbo>
</vco.srs>
</vco>
</exchange>

My XSL 2.0 template that does what I want:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/exchange">
<ImportTask xlns="http://inplace.quantumit.com.au/import/version_1_0/" xmlns:i="http://www.w3.org/2001/XMLSchema">
<CourseVersions>
<xsl:for-each select="/exchange/vco/vco.srs">
<CourseVersion>
<xsl:apply-templates select="//cbo_occl.cbo.srs | //crs/crs.srs"/>
</CourseVersion>
</xsl:for-each>
</CourseVersions>
</ImportTask>
</xsl:template>
<xsl:template match="cbo_occl.cbo.srs">
<CourseCode>
<!-- select all text-Nodes of vco_* elements -->
<xsl:for-each select="../../../*[matches(name(),'^vco_.*')]/text()">
<xsl:value-of select="concat(.,'-')"/>
</xsl:for-each>
<xsl:value-of select="."/>
</CourseCode>   
<Version>1</Version>
<EndDate>i:nil="true"</EndDate>
<PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
</xsl:template>
<xsl:template match="crs/crs.srs">
<xsl:for-each select="exchange/crs/crs.srs">
</xsl:for-each> 
<StartDate><xsl:value-of select="crs_begd.crs.srs"/></StartDate>
<Description><xsl:value-of select="crs_titl.crs.srs"/></Description>
<FacultyCode><xsl:value-of select="crs_dptc.crs.srs"/></FacultyCode>
</xsl:template>
</xsl:stylesheet>

The output I wanted

<?xml version="1.0" encoding="UTF-8"?>
<ImportTask xmlns:i="http://www.w3.org/2001/XMLSchema"
            xlns="http://inplace.quantumit.com.au/import/version_1_0/">
   <CourseVersions>
      <CourseVersion>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-FJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-FJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-FJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-FJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
      </CourseVersion>
      <CourseVersion>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-FJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFI-FJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-FJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-AJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
         <CourseCode>BUUBIF-BUBSBAT02-USBIFA-FJ</CourseCode>
         <Version>1</Version>
         <EndDate>i:nil="true"</EndDate>
         <PrimaryDisciplineCode>i:nil="true"</PrimaryDisciplineCode>
         <StartDate>2003-08-01</StartDate>
         <Description>BSc Banking &amp; Int Finance</Description>
         <FacultyCode>B</FacultyCode>
      </CourseVersion>
   </CourseVersions>
</ImportTask>

Many thanks

Jonah

如果您只需要检查固定前缀,则可以使用starts-with而不是matches

<xsl:for-each select="../../../*[starts-with(name(),'vco_')]/text()">

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM