xsl-list
[Top] [All Lists]

Re: [xsl] collection is not working

2018-04-03 04:20:53
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(_at_)gmail(_dot_)com <
xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 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
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] Current Thread [Next in Thread>