2017-01-25 44 views
0

我已經開發了一個API,它返回例如這個XML:如何在FileMaker中組合字段和數組?

<ApiResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <ErrorCode>0</ErrorCode> 
    <IsSuccess>true</IsSuccess> 
    <Message>ok</Message> 
    <Data xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
     <d2p1:string>Standard</d2p1:string> 
     <d2p1:string>50%</d2p1:string> 
     <d2p1:string>Großkunden</d2p1:string> 
     <d2p1:string>100%</d2p1:string> 
     <d2p1:string>Basis 7,-</d2p1:string> 
     <d2p1:string>Großladebonus</d2p1:string> 
     <d2p1:string>Neu</d2p1:string> 
     <d2p1:string>test</d2p1:string> 
     <d2p1:string>Test</d2p1:string> 
    </Data> 
</ApiResult> 

我的任務是創建用於導入XML的轉換。這是迄今爲止我的XSLT:

<?xml version='1.0' encoding='utf-8'?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult"> 
     <METADATA> 
     <FIELD NAME="ErrorCode" TYPE="NUMBER"/> 
     <FIELD NAME="IsSuccess" TYPE="TEXT"/> 
     <FIELD NAME="Message" TYPE="TEXT"/> 
     </METADATA> 
     <RESULTSET> 
     <ROW> 
      <COL> 
      <DATA> 
       <xsl:value-of select="ApiResult/ErrorCode"/> 
      </DATA> 
      </COL> 
      <COL> 
      <DATA> 
       <xsl:value-of select="ApiResult/IsSuccess"/> 
      </DATA> 
      </COL> 
      <COL> 
      <DATA> 
       <xsl:value-of select="ApiResult/Message"/> 
      </DATA> 
      </COL> 
     </ROW> 
     </RESULTSET> 
    </FMPXMLRESULT> 
    </xsl:template> 
</xsl:stylesheet> 

我被困在包括string型我Data - 陣列。我怎樣才能包括它?

回答

2

我被困在包括我的數據類型字符串的數組。我如何 包括它?

我不確定你想如何導入它們。 METADATA部分中沒有他們的字段,他們沒有任何標籤可以讓我知道他們代表的是什麼。

假設整個陣列是一個單一的記錄,並且該陣列的結構是固定的,你可以做這樣的事情:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" 
exclude-result-prefixes="d2p1"> 
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> 

<xsl:template match="/ApiResult"> 
    <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult"> 
     <METADATA> 
      <FIELD NAME="ErrorCode" TYPE="NUMBER"/> 
      <FIELD NAME="IsSuccess" TYPE="TEXT"/> 
      <FIELD NAME="Message" TYPE="TEXT"/> 
      <FIELD NAME="Field1" TYPE="TEXT"/> 
      <FIELD NAME="Field2" TYPE="TEXT"/> 
      <FIELD NAME="Field3" TYPE="TEXT"/> 
      <!-- ADD MORE FIELDS AS NEEDED --> 
     </METADATA> 
     <RESULTSET> 
      <ROW> 
       <COL><DATA><xsl:value-of select="ErrorCode"/></DATA></COL> 
       <COL><DATA><xsl:value-of select="IsSuccess"/></DATA></COL> 
       <COL><DATA><xsl:value-of select="Message"/></DATA></COL> 
       <COL><DATA><xsl:value-of select="Data/d2p1:string[1]"/></DATA></COL> 
       <COL><DATA><xsl:value-of select="Data/d2p1:string[2]"/></DATA></COL> 
       <COL><DATA><xsl:value-of select="Data/d2p1:string[3]"/></DATA></COL> 
       <!-- ADD MORE DATA STRINGS AS NEEDED --> 
      </ROW> 
     </RESULTSET> 
    </FMPXMLRESULT> 
</xsl:template> 

</xsl:stylesheet> 

以上將使您導入前三個數據字符串。您將在導入記錄對話框的左側窗格中看到字段名稱Field1Field2Field3(當然,您可以在樣式表中更改這些名稱以匹配目標字段名稱)。

+0

感謝您的回覆。有沒有更動態的方法?它可能只有3個字符串,但也可能是999個字符串。 –

+0

或其他公式:有可能兩個有多個'RESULTSET's?一個用於操作狀態,另一個用於實際結果? –

+1

在XSLT中有一種動態方式,但FileMaker中沒有。在導入期間,您不能將999個字段添加到解決方案中。唯一合理的解決方案是將每個字符串作爲單獨的記錄導入。不過,我不確定你會以這種格式對待他們。沒有標籤,他們似乎毫無意義。 –