2017-01-25 42 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个字段添加到解决方案中。唯一合理的解决方案是将每个字符串作为单独的记录导入。不过,我不确定你会以这种格式对待他们。没有标签,他们似乎毫无意义。 –