Как импортировать XML-файлы с повторяющимися полями в базу данных FileMaker? - PullRequest
2 голосов
/ 10 августа 2009

Я использую FileMaker Pro 9 и хочу взять базу данных с повторяющимися записями (например, одно поле - «Линии» и может содержать до 9 строк) и импортировать в нее данные из файла XML.

Прямо сейчас, со следующим XML-файлом, я получаю только первую импортированную запись ("Комната"):

<?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 ]

4 голосов
/ 28 февраля 2012

Вы можете импортировать и экспортировать повторяющиеся поля (массивы) в Filemaker, но не в формате XML.

Я только что понял. Вы можете экспортировать и импортировать повторяющиеся поля из Filemaker, если вы используете их формат слияния (.mer), или значения, разделенные запятыми (CSV), или другой формат с разделителями в виде простого текста. В противном случае он даст вам только первое из повторений в поле. XML не вариант для этого. Для этого примера я буду использовать CSV-файл.

Во-первых, чтобы правильно импортировать повторяющиеся поля, вам нужно понять несколько вещей ...

  1. Когда Filemaker экспортирует или импортирует данные повторяющихся полей, он использует специальный скрытый символ для разделения повторяющихся элементов. Символ ASCII-29, но вы не можете просто набрать его, как другие символы. На Mac или ПК клавишей является ctr +] (удерживайте нажатой клавишу управления и правую квадратную скобку).

  2. Это лучше всего обрабатывается в текстовом редакторе, который может отображать невидимые символы, такие как Coda или Text Wrangler. В Coda я включил «Показывать невидимые символы», потому что если вы не находитесь в текстовом редакторе с включенным, вы ничего не увидите, так как он вставляет символ за текстом и между повторяющимися символами нет пробелов. товар.

  3. В CSV поля заключены в кавычки и разделены запятой. Записи отделяются переводом каретки (клавиша ввода или возврата). Заголовки полей разделяются запятой, но не заключаются в кавычки.

Вот пример в формате CSV. Я обозначу скрытого персонажа цифрой 29 в скобках ([29]):

Номер ящика, содержание

"1", "яблоки [29] апельсины [29] бананы"

"2", "треска [29] тунец [29] лосось [29] форель"

«3», «Мой маленький пони [29] Хе-Ман»

В коробке 1 были яблоки, апельсины и бананы.

В коробке 2 были треска, тунец, лосось и форель.

В коробке 3 были Мой Маленький Пони и Он-Человек.

И вот оно у вас. Filemaker распознает его как повторяющиеся поля. Стоит сначала экспортировать некоторые повторяющиеся поля из Filemaker и взглянуть на файл из текстового редактора (с отображением скрытых символов), просто чтобы получить наглядное представление о том, что вы будете пытаться выполнить.

1 голос
/ 30 октября 2013

Предыдущие ответы неверны. Фактически вы можете импортировать списки значений с разделителями из файлов XML в таблицы FileMaker. Однако, честно говоря, FileMaker не может сделать это по своей природе, используя свой собственный импорт XML. Для этого необходимо создать файл XSL Transform, который будет использоваться вместе с файлом XML при импорте. Внутри тега данных в файле Transform используйте структуру для итерации и объединения значений в файле XML.

1 голос
/ 11 августа 2009

Вы не можете. Но вы можете обойти это:

Насколько я могу судить, FileMaker, похоже, использует символ ASCII-29 для разделения данных в повторяющихся полях. У вас есть несколько вариантов.

  1. Если вы можете решить проблемы с кодировкой, просто выделите один элемент и разделите Комнату, Оборудование и Работу с символом ASCII-29 между ними.

  2. Добавьте свой собственный разделитель и напишите скрипт / пользовательскую функцию, которая берет импортированные данные и помещает их в требуемое повторяющееся поле. (этот скрипт будет выглядеть неприлично)

  3. НЕ ИСПОЛЬЗОВАТЬ ПОВТОРНЫЕ ПОЛЯ

Лично я остаюсь как можно дальше от Повторяющихся полей.

Если это вообще возможно, используйте новую связанную таблицу для повторяющихся данных. Вы можете использовать портал или аналогичный, чтобы отобразить его, если вы того пожелаете, или вы можете даже перетащить его в вычисляемое поле в основной таблице, если оно там должно быть. Примерно так:

INVOICE
-------
ID
Invoice Date

LINES
-------
ID
fk_InvoiceID
Item

После этого они могут быть связаны с INVOICE :: ID -

Вы также можете иметь вычисляемое поле, которое выглядит примерно так в таблице счетов:

cLines = List(LINES::Item)

Что даст вам что-то вроде:

Room
Equipment
Labor

В этом одном поле.

0 голосов
/ 11 августа 2009
...