Jump to content

IMPORTING RSS XML into FMPro Adv 10.0v3


epatrick

This topic is 3063 days old. Please don't post here. Open a new topic instead.

Recommended Posts

  • 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>

Link to comment
Share on other sites

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>

 

  • Like 1
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

  • Like 1
Link to comment
Share on other sites

This topic is 3063 days old. Please don't post here. Open a new topic instead.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

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