2013-12-05 1 views
2

Я пытаюсь преобразовать следующий XML Shopify ...H2 уточнить XSLT для преобразования XML Shopify для FileMaker импорта

<orders> 
    <order> 
    <order-no>1001</order-no> 
    <line-items> 
     <line-item> 
     <product-id>knife</product-id> 
     </line-item> 
     <line-item> 
     <product-id>fork</product-id> 
     </line-item> 
    </line-items> 
    <shipping-address> 
     <post-code>rh10 3hs</post-code> 
    </shipping-address> 
    </order> 
</orders> 

к FileMaker FMPXMLRESULT ..

Грэммер
<ROW> 
    <COL> 
    <DATA>1001</DATA> 
    </COL> 
    <COL> 
    <DATA>Knife</DATA> 
    </COL> 
    <COL> 
    <DATA>rh10 3hs</DATA> 
    </COL> 
</ROW> 
<ROW> 
    <COL> 
    <DATA>1001</DATA> 
    </COL> 
    <COL> 
    <DATA>Fork</DATA> 
    </COL> 
    <COL> 
    <DATA>rh10 3hs</DATA> 
    </COL> 
</ROW> 

т.е.
1001 Нож rh10 3hs
1001 Вилка rh10 3hs

с использованием примера FileMaker xslt ...

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

НО это извлекает информацию о порядке верхнего уровня для каждого заказа, игнорируя детей и внуков.

Я начинающий и тралил сеть и форумы пытаются много перестановок строки «», но, честно говоря, это догадок и первоначальная эйфория будет начать заменить отчаянием ;-(

Любые советы значительно оценили

Большое спасибо, Jim

ответ

1

В Filemaker, вы можете импортировать только в одну таблицу, в то время требуется отдельная таблица стилей для каждого импорта Этот один для импорта в таблицу LineItems:..

<?xml version="1.0" encoding="UTF-8"?> 
<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="/"> 

<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult"> 
<ERRORCODE>0</ERRORCODE> 
<PRODUCT BUILD="" NAME="" VERSION=""/> 
<DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/> 

<METADATA> 
<FIELD NAME="OrderID" TYPE="TEXT" EMPTYOK="YES" MAXREPEAT=""/> 
<FIELD NAME="ProductID" TYPE="TEXT" EMPTYOK="YES" MAXREPEAT=""/> 
</METADATA> 

<RESULTSET FOUND=""> 

<xsl:for-each select="orders/order/line-items/line-item"> 

<ROW MODID="" RECORDID=""> 
<COL><DATA><xsl:value-of select="../../order-no"/></DATA></COL> 
<COL><DATA><xsl:value-of select="product-id"/></DATA></COL> 
</ROW> 

</xsl:for-each> 

</RESULTSET> 
</FMPXMLRESULT> 

</xsl:template> 
</xsl:stylesheet> 

и это один для импорта в столе заказов:

<?xml version="1.0" encoding="UTF-8"?> 
<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="/"> 

<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult"> 
<ERRORCODE>0</ERRORCODE> 
<PRODUCT BUILD="" NAME="" VERSION=""/> 
<DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/> 

<METADATA> 
<FIELD NAME="OrderID" TYPE="TEXT" EMPTYOK="YES" MAXREPEAT=""/> 
<FIELD NAME="PostCode" TYPE="TEXT" EMPTYOK="YES" MAXREPEAT=""/> 
</METADATA> 

<RESULTSET FOUND=""> 

<xsl:for-each select="orders/order"> 

<ROW MODID="" RECORDID=""> 
<COL><DATA><xsl:value-of select="order-no"/></DATA></COL> 
<COL><DATA><xsl:value-of select="shipping-address/post-code"/></DATA></COL> 
</ROW> 

</xsl:for-each> 

</RESULTSET> 
</FMPXMLRESULT> 

</xsl:template> 
</xsl:stylesheet>