Jump to content
View in the app

A better way to browse. Learn more.

FMForums.com

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

  • Newbies

I need some help importing a RSS 2.0 XML into FileMaker Pro Adv 10. I'm trying to modify a xslt file that came with FM. When I use this xslt it tries to map the parent Recipients and not the child Recipient.  I'm stuck and could use a hand.  Any thoughts on what to modify or add would be much appreciated?

Here is the xlst:

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

Transforms data in an ELEMENT based MSDSO grammar
into the FMPXMLRESULT grammar, suitable for import.
      
===============================================================

Copyright © 2002 FileMaker, Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or
without modification, are permitted provided that the following
conditions are met:

* Redistributions of source code must retain the above copyright
  notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright
  notice, this list of conditions and the following disclaimer in
  the documentation and/or other materials provided with the
  distribution.

* Neither the name of the FileMaker, Inc. nor the names of its
  contributors may be used to endorse or promote products derived
  from this software without specific prior written
  permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    
===============================================================
-->
       
    <xsl:template match="/*">
        <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
            <ERRORCODE>0</ERRORCODE>
            <PRODUCT BUILD="" NAME="" VERSION=""/>
            <DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="" RECORDS="{count(/*/*)}" TIMEFORMAT="h:mm:ss a"/>
            <METADATA>
                <xsl:for-each select="/*/*[position()=1]/*">
                    <FIELD>
                        <xsl:attribute name="EMPTYOK">YES</xsl:attribute>
                        <xsl:attribute name="MAXREPEAT">1</xsl:attribute>
                        <xsl:attribute name="NAME"><xsl:value-of select="name()"/></xsl:attribute>
                        <xsl:attribute name="TYPE">TEXT</xsl:attribute>
                    </FIELD>
                </xsl:for-each>
            </METADATA>
            <RESULTSET>
                <xsl:attribute name="FOUND"><xsl:value-of select="count(child::*)"/></xsl:attribute>
                <xsl:for-each select="child::*">
                    <ROW>
                        <xsl:attribute name="MODID">0</xsl:attribute>
                        <xsl:attribute name="RECORDID">0</xsl:attribute>
                        <xsl:for-each select="child::*">
                            <COL>
                                <DATA>
                                    <xsl:value-of select="."/>
                                </DATA>
                            </COL>
                        </xsl:for-each>
                    </ROW>
                </xsl:for-each>
            </RESULTSET>
        </FMPXMLRESULT>
    </xsl:template>
</xsl:stylesheet>

 

 

Here is the XML:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <Recipients>
        <Recipient>
            <First_name>Adam</First_name>
            <Last_name>Smith</Last_name>
            <Address1>123 main street</Address1>
            <Address2 />
            <City>Lakewood ranch</City>
            <State>NY</State>
            <Zip>10012</Zip>
            <Country>USA</Country>
            <Cust_Phone>941-555-1212</Cust_Phone>
            <Company_name />
            <L_num>Z3116-01</L_num>
            <Qty>50</Qty>
            <Promo>G147571</Promo>
            <Toll_num>1-888-238-0030</Toll_num>
            <email>[email protected]</email>
            <email2>[email protected]</email2>
            <repName />
            <repPhone />
            <CustomText>Adam Smith</CustomText>
            <IntOrderId>230839</IntOrderId>
            <OrderDateTime>2015-10-07 14:26:44</OrderDateTime>
        </Recipient>
    </Recipients>
</rss>

That's the trouble with generic stylesheets: they only fit what the authors envisioned as generic XML sources. However, the X in XML stands for eXtensible, and there's no way a single stylesheet can fit all. There is no such thing as a generic XML.

You didn't tell us what exactly do you want to import, so here's a stylesheet that will offer to import everything from your source; just select the fields you want and map them to your own fields in the import dialog.

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:template match="/rss">
	<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
		<ERRORCODE>0</ERRORCODE>
		<PRODUCT BUILD="" NAME="" VERSION=""/>
		<DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/>
		<!-- DEFINE FIELDS -->
		<METADATA>
			<xsl:for-each select="Recipients/Recipient[1]/*">
				<FIELD NAME="{name()}" TYPE="TEXT" EMPTYOK="YES" MAXREPEAT=""/>
			</xsl:for-each>
		</METADATA>
		<!-- IMPORT DATA -->
		<RESULTSET FOUND="">
			<xsl:for-each select="Recipients/Recipient">
				<ROW MODID="" RECORDID="">
					<xsl:for-each select="*">
						<COL><DATA><xsl:value-of select="."/></DATA></COL>
					</xsl:for-each>
				</ROW>
			</xsl:for-each>
		</RESULTSET>
	</FMPXMLRESULT>
</xsl:template>

</xsl:stylesheet>

 

and hopefully the first element 

Recipient

has all the child elements (including empty ones) that are needed for all the Recipients. I'm my experience empty elements may not be in a transmission (XML source) at all. Getting an XSD (or DTD or schema document of some sort) is the best way to assure all elements (and attributes) are imported if needed. Then "generic" is not the way to go, but explicitly calling the elements or attributes needed.

 

beverly

and hopefully the first element 

Recipient

has all the child elements (including empty ones) that are needed for all the Recipients.

I see empty elements in the given example, so I assume all Recipient nodes have the same child elements (and in the same order). But I agree that this is an important point, and the assumption should be stated explicitly.

Create an account or sign in to comment

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.