问题描述:

First ... This forum has helped me many, many times in finding answers to my questions without having to ask my own. Thank you to those answering.

I promise to do better this time with following this forums protocol.

I'm not totally positive that my question is stated well enough so I'll draw it out a bit .....

The XML I am getting contains a 'set' of results within the response that each needs to have their own 'minimum' for my importing.

Here's the very condensed look just to give you an idea:

<?xml version="1.0"?>

<GetLowestOfferListingsForASINResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">

<GetLowestOfferListingsForASINResult ASIN="0470067802" status="Success"></GetLowestOfferListingsForASINResult>

<GetLowestOfferListingsForASINResult ASIN="0684177722" status="Success"></GetLowestOfferListingsForASINResult>

<GetLowestOfferListingsForASINResult ASIN="0470052325" status="Success"></GetLowestOfferListingsForASINResult>

<GetLowestOfferListingsForASINResult ASIN="0470182601" status="Success"></GetLowestOfferListingsForASINResult>

<GetLowestOfferListingsForASINResult ASIN="0525950869" status="Success"></GetLowestOfferListingsForASINResult>

</GetLowestOfferListingsForASINResponse>

Further more there are actually 3 occurrences of the 'Amount' element within each result returned ....

Currently my variable takes every 'Amount' within the overall response and not from each result set.

XLST :

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"

xmlns:amz="http://mws.amazonservices.com/schema/Products/2011-10-01" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd" exclude-result-prefixes="amz ns2">

<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:template match="/">

<xsl:variable name="MIN_Landed">

<xsl:for-each select="//amz:Price/amz:LandedPrice/amz:Amount">

<xsl:sort data-type="number" order="ascending"/>

<xsl:if test="position()=1"><xsl:value-of select="."/></xsl:if>

</xsl:for-each>

</xsl:variable>

<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">

<ERRORCODE>0</ERRORCODE>

<PRODUCT BUILD="" NAME="" VERSION=""/>

<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="" RECORDS="1" TIMEFORMAT="h:mm:ss a"/>

<METADATA>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="MIN_Landed" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ASIN" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ItemCondition" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ItemSubCondition" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="LandedPrice" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ListingPrice" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Shipping" TYPE="TEXT"/>

</METADATA>

<RESULTSET>

<xsl:attribute name="FOUND">1</xsl:attribute>

<xsl:for-each select="amz:GetLowestOfferListingsForASINResponse/amz:GetLowestOfferListingsForASINResult/amz:Product/amz:LowestOfferListings/amz:LowestOfferListing">

<ROW>

<xsl:attribute name="MODID">0</xsl:attribute>

<xsl:attribute name="RECORDID">1</xsl:attribute>

<COL>

<DATA>

<xsl:value-of select="$MIN_Landed"/>

</DATA>

</COL>

<COL>

<DATA>

<xsl:value-of select="../../amz:Identifiers/amz:MarketplaceASIN/amz:ASIN"/>

</DATA>

</COL>

<COL>

<DATA>

<xsl:value-of select="amz:Qualifiers/amz:ItemCondition"/>

</DATA>

</COL>

<COL>

<DATA>

<xsl:value-of select="amz:Qualifiers/amz:ItemSubcondition"/>

</DATA>

</COL>

<COL>

<DATA>

<xsl:value-of select="amz:Price/amz:LandedPrice/amz:Amount"/>

</DATA>

</COL>

<COL>

<DATA>

<xsl:value-of select="amz:Price/amz:ListingPrice/amz:Amount"/>

</DATA>

</COL>

<COL>

<DATA>

<xsl:value-of select="amz:Price/amz:Shipping/amz:Amount"/>

</DATA>

</COL>

</ROW>

</xsl:for-each>

</RESULTSET>

</FMPXMLRESULT>

</xsl:template>

</xsl:stylesheet>

Here is a test XML ....

<?xml version="1.0"?>

<GetLowestOfferListingsForASINResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">

<GetLowestOfferListingsForASINResult ASIN="0060784776" status="Success">

<Product>

<Identifiers>

<MarketplaceASIN>

<MarketplaceId>ATVPDKIKX0DER</MarketplaceId>

<ASIN>0060784776</ASIN>

</MarketplaceASIN>

</Identifiers>

<LowestOfferListings>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Good</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>8.98</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>4.99</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Collectible</ItemCondition>

<ItemSubcondition>Mint</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>8.98</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>4.99</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>VeryGood</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>9.00</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>9.00</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>0.00</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Acceptable</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>9.44</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>5.45</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>New</ItemCondition>

<ItemSubcondition>New</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>9.45</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>9.45</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>0.00</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>VeryGood</ItemSubcondition>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>9.45</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>5.46</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>New</ItemCondition>

<ItemSubcondition>New</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>9.95</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>9.95</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>0.00</Amount>

</Shipping>

</Price>

</LowestOfferListing>

</LowestOfferListings>

</Product>

</GetLowestOfferListingsForASINResult>

<GetLowestOfferListingsForASINResult ASIN="0140171223" status="Success">

<Product>

<Identifiers>

<MarketplaceASIN>

<MarketplaceId>ATVPDKIKX0DER</MarketplaceId>

<ASIN>0140171223</ASIN>

</MarketplaceASIN>

</Identifiers>

<LowestOfferListings>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Good</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>6.99</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.00</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Acceptable</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>6.99</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.00</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Mint</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>7.49</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.50</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Acceptable</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>8.48</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>4.49</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>New</ItemCondition>

<ItemSubcondition>New</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>8.49</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>4.50</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Mint</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>8.78</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>4.79</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Good</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>8.98</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>4.99</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>New</ItemCondition>

<ItemSubcondition>New</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>8.99</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>5.00</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

</LowestOfferListings>

</Product>

</GetLowestOfferListingsForASINResult>

<GetLowestOfferListingsForASINResult ASIN="014100181X" status="Success">

<Product>

<Identifiers>

<MarketplaceASIN>

<MarketplaceId>ATVPDKIKX0DER</MarketplaceId>

<ASIN>014100181X</ASIN>

</MarketplaceASIN>

</Identifiers>

<LowestOfferListings>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>VeryGood</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>0.00</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Good</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>0.00</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Good</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>0.00</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Good</ItemSubcondition>

<FulfillmentChannel>Merchant</FulfillmentChannel>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>4.00</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>0.01</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

<LowestOfferListing>

<Qualifiers>

<ItemCondition>Used</ItemCondition>

<ItemSubcondition>Good</ItemSubcondition>

</Qualifiers>

<Price>

<LandedPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>4.00</Amount>

</LandedPrice>

<ListingPrice>

<CurrencyCode>USD</CurrencyCode>

<Amount>0.01</Amount>

</ListingPrice>

<Shipping>

<CurrencyCode>USD</CurrencyCode>

<Amount>3.99</Amount>

</Shipping>

</Price>

</LowestOfferListing>

</LowestOfferListings>

</Product>

</GetLowestOfferListingsForASINResult>

</GetLowestOfferListingsForASINResponse>

网友答案:

If I understand you correctly, your problem is that your code is currently finding the lowest Amount value in the document, and you want instead to find the lowest amount in each amz:LowestOfferListing.

You will need to change two things.

First, instead of setting the value of $MIN_Landed once, you will need to bind that variable once for each result set. So move the xsl:variable declaration into the for-each which will be evaluated once for each result set.

Second, the value you want is the lowest amount within the result set, not the lowest value within the document. So you will need to change the select attribute in the expression that determines the value of the $MIN_Landed variable so that it selects only amz:Amount elements that occur within the current result set. (Hint: start the select expression with './/', not '//'.)

相关阅读:
Top