Re: [xsl] collection is not working

Subject: Re: [xsl] collection is not working
From: "Mukul Gandhi gandhi.mukul@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 3 Apr 2018 09:20:46 -0000
Hi Rahul,
   Here's something that I tried, which worked.

The XSLT stylesheet is,

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";

                         xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance";
                         exclude-result-prefixes="xsi"
                         version="2.0">

    <xsl:output method="text"/>
    <xsl:param name="DocumentsURI" />

    <xsl:template match="/">
        <xsl:text>Filename  Schema name&#xa;</xsl:text>
        <xsl:for-each
select="collection(concat($DocumentsURI,'?select=*.xml;recurse=yes;on-error=ignore'))">
            <xsl:variable name="fileName" select="base-uri()"/>
            <xsl:variable name="schemaName"
select="article/@xsi:noNamespaceSchemaLocation"/>
            <xsl:value-of select="tokenize($fileName,'/')[last()]"/>
            <xsl:text> </xsl:text>
            <xsl:value-of select="$schemaName"/>
            <xsl:text>&#xa;</xsl:text>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

Please create a parameter to stylesheet as follows,
name:  DocumentsURI
value: file:/C:/Users/mukul/Desktop/test
(the 'value' is where, all my XML files and XSLT are kept. Please mention
location as per your local environment)

I specified the XML files as follows,
aa.xml
<?xml version="1.0" encoding="UTF-8"?>
<article xsi:noNamespaceSchemaLocation="aa.xsd" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance";>
   <name>aaas</name>
</article>

Similarly for other XML files.

After running the stylesheet I get following output,
Filename  Schema name
aa.xml aa.xsd
bb.xml bb.xsd
cc.xml cc.xsd

I used Saxon-HE 9.7.0.19, to test this.

Hope this helps.

On Mon, Apr 2, 2018 at 10:09 PM, Rahul Singh rahulsinghindia15@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> Hi,
>
> I have 100 xml file which contains xml data with schemalocation namespace
> in root element, i have written xslt to merge file name with schema name in
> one file but i am not able to generate my output :
>
> *Input: *
> *aa.xml*
> <?xml version="1.0" encoding="UTF-8"?>
> *<article xsi:noSchemaLocation="aa.xsd">*
> <name>aaas</name>
> </article>
>
>
> *bb.xml*
> <?xml version="1.0" encoding="UTF-8"?>
> *<article xsi:noSchemaLocation="bb.xsd">*
> <name>ars</name>
> </article>
>
>
> *cc.xml*
> <?xml version="1.0" encoding="UTF-8"?>
> *<article> xsi:noSchemaLocation="cc.xsd"*
> <name>tytu</name>
> </article>
>
>
> *Expected output:*
>
> Filename  Schema name
> aa.xml      aa.xsd
> bb.xml      bb.xsd
> cc.xml      cc.xsd
>
>
> *code:*
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/
> 1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format";
> xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:fn="http://www.w3.org/
> 2005/xpath-functions">
>     <xsl:output method="xml" indent="yes"/>
>     <xsl:strip-space elements="*"/>
>     <xsl:param name="DocumentsURI" select="'file:/C:/Users/rahul/
> Downloads/ARB/ARB'"/>
>     <xsl:template match="node()|@*">
>         <xsl:copy>
>             <xsl:apply-templates select="node()|@*"/>
>         </xsl:copy>
>     </xsl:template>
>     <xsl:template match="/">
>         <!--Generating Result Docuemnt-->
>         <xsl:result-document href="Merged.xml" method="xml" indent="yes">
>             <Articles>
>                 <xsl:for-each select="collection(concat($
> DocumentsURI,'?select=*.xml;recurse=yes;on-error=ignore'))">
>                     <xsl:apply-templates select="/article"/>
>                 </xsl:for-each>
>             </Articles>
>         </xsl:result-document>
>     </xsl:template>
> </xsl:stylesheet>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <-list/2709226> (by
> email <>)
>



-- 
Regards,
Mukul Gandhi

Current Thread