代码之家  ›  专栏  ›  技术社区  ›  Zian Choy

如何将具有重复字段的XML文件导入文件生成器数据库?

  •  2
  • Zian Choy  · 技术社区  · 17 年前

    我使用的是FileMaker Pro 9,我想创建一个具有重复记录的数据库(例如,一个字段是“行”,最多可以有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 回复  |  直到 12 年前
        1
  •  4
  •   Adam Cook    13 年前

    可以 在文件生成器中导入和导出重复字段(数组),但不从XML格式中导入和导出。

    我刚想出来。只要使用合并(.mer)格式、逗号分隔值(csv)或其他纯文本分隔格式,就可以从文件生成器导出和导入重复域。否则,它只会给你第一次在现场重复。XML不是一个选项。对于这个例子,我将使用一个csv文件。

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

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

    2. 这最好在文本编辑器中处理,该编辑器可以显示不可见字符,如coda或文本包装器。在Coda中,我打开了“显示不可见字符”,因为除非您在打开了“显示不可见字符”的文本编辑器中,否则您将看不到任何情况,因为它在文本后面插入字符,并且重复项之间没有任何空格。

    3. 在CSV中, 领域 包含在引号中并用逗号分隔。 记录 由回车键(回车键或回车键)分隔。 字段标头 用逗号分隔,但不包含在引号中。

    下面是一个csv格式的例子。我将用括号([29])中的数字29指定隐藏字符:

    箱号、内容

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

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

    “3”,“我的小马”[29]他

    一号包厢里有苹果、桔子和香蕉。

    盒子2有鳕鱼,金枪鱼,鲑鱼和鳟鱼。

    3号包厢有我的小马和他。

    就在这里。文件生成器将其识别为重复字段。首先从FileMaker中导出一些重复字段,然后在文本编辑器中查看该文件(显示隐藏字符),这样做是值得的,只需查看您将要尝试完成的操作。

        2
  •  1
  •   DisplacedAussie    17 年前

    你不能。但是你可以绕过它:

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

    1. 如果您能解决编码问题,只需将一个元素和分割的房间、设备和人工之间的ASCII-29字符。

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

    3. 不使用重复域

    就我个人而言,我尽量远离重复的领域。

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

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

    然后它们可以是相关的invoice::id--<lines::fk_invoiceid,您可以在门户中显示所有项目。

    您还可以在发票表中有一个类似这样的计算字段:

    cLines = List(LINES::Item)
    

    这会给你一些东西,比如:

    Room
    Equipment
    Labor
    

    在那个领域。

        3
  •  1
  •   JohnW    12 年前

    前面的答案不正确。实际上,您可以将分隔值列表从XML文件导入到文件生成器表中。但是,公平地说,文件制造者不能本质上使用它的本机XML导入。为此,必须创建一个XSL转换文件,以便在导入时与XML文件一起使用。在转换文件中的数据标记中,使用一个结构来迭代和连接XML文件中的值。