[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Using multiple values stored in a variable

Subject: Using multiple values stored in a variable
From: Manuel Souto Pico <m.soutopico@xxxxxxxxx>
Date: Sun, 6 Jan 2013 19:13:01 +0000
 Using multiple values stored in a variable
Hi there,

I've been stuck for a couple of days with a failing transformation, I
hope any one can help me out. Thank you very much in advance.

I have an external XML document that looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<glossary>
    <entry id="2">
        <source>
            <term>access</term>
        </source>
        <target>
            <term>acceso</term>
            <term>ingreso</term>
        </target>
    </entry>
</glossary>

That's a glossary that I use to proces the main XML document. I get it
like this:

<xsl:variable name="glossary" select=
            "document('file:////path/to/saxonhe9-3-0-11j/glossary.xml')"/>

For each entry in the glossary, I need to check whether ANY of the
terms (under target) is found in a string element of the main
document:

If there was only one term element under each target, it would be easy
to capture:

<xsl:variable name="target-term" select="../../target/term[normalize-space()]"/>

But since there might be any number of terms, I think I need to use
something like this (which seems to work):

<xsl:variable name="target-term" as="element()*"
select="../../target/term[normalize-space()]"/>

Then, for the actual check, this would work if there was only one
term, but if fails for the multiple valued variable that I have:

<xsl:when test="matches(string, $target-term, 'i')">
    <xsl:text>Found</xsl:text>
</xsl:when>

I get error XPTY0004: A sequence of more than one item is not allowed
as the second argument of
  matches() ("acceso", "ingreso")

The wrong bit should be the $target-term, but I don't know how to
write in order to check the mutiple values one by one.

Although I think I've given all the necessary details, the full
stylesheet is below if case you want to have a wider context or
improve anything (probably some of the recursions are unnecessary, and
the processing is slow):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
    exclude-result-prefixes="xd"
    version="2.0">
    <xsl:output method="text"/>

    <xsl:template match="/">

        <xsl:variable name="glossary" select=
            "document('file:////Users/souto/Tools/saxonhe9-3-0-11j/glossary.xml')"/>

        <xsl:for-each select="xliff//trans-unit/source">
            <xsl:variable name="source-segment" select="."/>
            <xsl:variable name="target-segment" select="../target"/>
            <xsl:for-each select="$glossary//source/term">
                <xsl:variable name="source-term" select="."/>
                <xsl:variable name="target-term" as="element()*"
select="../../target/term[normalize-space()]"/>
                <xsl:if test="matches($source-segment, $source-term, 'i')">
                    <xsl:choose>
                        <xsl:when test="matches($target-segment,
$target-term, 'i')">
                            <xsl:text>Term found.</xsl:text>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:text>Term not found.</xsl:text>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:if>
            </xsl:for-each>
        </xsl:for-each>

    </xsl:template>
</xsl:stylesheet>

Thanks a lot!

Cheers, Manuel

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.