如何将带有重复字段的XML文件导入FileMaker数据库?

时间:2009-08-10 18:36:03

标签: xml filemaker

我正在使用FileMaker Pro 9,我想要一个带有重复记录的数据库(例如,一个字段是“Lines”,它最多可以有9个字符串),并从XML文件中将数据导入其中。

现在,使用以下XML文件,我只获得导入的第一个条目(“Room”):

<?xml version="1.0" encoding="UTF-8"?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
    <ERRORCODE>0</ERRORCODE>
    <PRODUCT NAME="" VERSION="" BUILD=""/>
    <DATABASE NAME="New Invoice" RECORDS="1" DATEFORMAT="M/d/yyyy" TIMEFORMAT="" LAYOUT="hh/mm/a"/>
    <METADATA>
        <FIELD NAME="Description Index" TYPE="TEXT" EMPTYOK="NO" MAXREPEAT="9"/>
    </METADATA>
    <RESULTSET FOUND="1">
        <ROW RECORDID="" MODID="">
            <COL>
                <DATA>Room</DATA>
                <DATA>Equipment</DATA>
                <DATA>Labor</DATA>
            </COL>
         </ROW>
    </RESULTSET>
</FMPXMLRESULT>

如何导入其他条目(“设备”和“工党”)?

4 个答案:

答案 0 :(得分:4)

可以在Filemaker中导入和导出重复字段(数组),但不能从XML格式导入和导出。

我只是想通了。只要使用其合并(.mer)格式或逗号分隔值(CSV)或其他纯文本分隔格式,就可以从Filemaker导出和导入重复字段。否则,它只会为您提供该字段中的第一个重复。 XML不是一个选项。对于此示例,我将使用csv文件。

首先,为了正确导入重复字段,您必须了解一些事情......

  1. 当Filemaker导出或导入重复字段数据时,它使用特殊的隐藏字符来分隔重复项。该字符是ASCII-29,但您不能像其他字符一样输入。在Mac或PC上,键是ctr +](按住控件和右方括号)。

  2. 最好在文本编辑器中处理,可以显示不可见的字符,例如Coda或Text Wrangler。在Coda中,我打开了“显示隐形字符”,因为除非你在打开的文本编辑器中,否则你不会看到任何事情发生,因为它在文本后面插入了字符,重复之间没有任何空格项目

  3. 在CSV中,字段包含在引号中,并以逗号分隔。 记录由回车符(输入或返回键)分隔。 字段标题由逗号分隔,但不包含在引号中。

  4. 以下是CSV格式的示例。我将用括号中的数字29([29])指定隐藏的字符:

      

    包装箱号码,内容

         

    “1”, “苹果[29]桔子[29]香蕉”

         

    “2”,“鳕鱼[29]金枪鱼[29]鲑鱼[29]鳟鱼”

         

    “3”,“我的小马[29]赫曼”

    方框1有苹果,橘子和香蕉。

    方框2有鳕鱼,金枪鱼,鲑鱼和鳟鱼。

    Box 3有My Little Pony和He-Man。

    你有它。 Filemaker将其识别为重复字段。值得首先从Filemaker导出一些重复字段,然后从文本编辑器中查看文件(显示隐藏字符),只是为了了解您将要完成的内容。

答案 1 :(得分:1)

你做不到。但你可以解决它:

据我所知,FileMaker似乎在内部使用ASCII-29字符来分割重复字段中的数据。你有几个选择。

  1. 如果您可以解决编码问题,只需使用一个元素,并将房间,设备和人工分开,并使用ASCII-29字符。

  2. 添加您自己的分隔符并编写一个脚本/自定义函数,该函数获取导入的数据并将其推送到所需的重复字段中。 (这个脚本看起来很蹩脚)

  3. 请勿使用重复字段

  4. 就个人而言,我尽可能远离重复领域。

    如果可能,请使用新的相关表格来表示重复数据。如果您愿意,可以使用门户或类似设备来显示它,或者如果必须存在,您甚至可以将其拉入主表中的计算字段。像这样:

    INVOICE
    -------
    ID
    Invoice Date
    
    LINES
    -------
    ID
    fk_InvoiceID
    Item
    

    然后它们可以是相关的INVOICE :: ID - &lt; LINES :: fk_InvoiceID,您可以显示门户网站中的所有项目。

    您还可以在发票表中找到类似于此的计算字段:

    cLines = List(LINES::Item)
    

    这会给你类似的东西:

    Room
    Equipment
    Labor
    

    在那一个领域。

答案 2 :(得分:1)

之前的答案不正确。实际上,您可以将XML文件中的分隔值列表导入FileMaker表。但是,公平地说,FileMaker无法使用它的原生XML Import本质上做到这一点。为此,必须创建一个XSL转换文件,以便在导入时与XML文件一起使用。在Transform文件的数据标记内,使用一个结构来迭代并连接XML文件中的值。

答案 3 :(得分:-1)