Как импортировать атрибуты и элементы из XML в Filemaker? - PullRequest
0 голосов
/ 28 февраля 2009

У меня есть приложение, которое хранит свою пользовательскую базу данных в файле XML, и мне нужно экспортировать выбранные поля в Filemaker, чтобы мой клиент и мои данные на Filemaker. Мне удалось создать XSLT-файл для импорта элементов XML, но я не могу найти способ импортировать какие-либо элементы. Указатели в решении этой проблемы ожидаются.

Пример XML-файла:

<?xml version="1.0" encoding="utf-8"?>
<APPLICATION_NAME>
  <USERS>
    <USER>
      <ID>15001</ID>
      <USERNAME>Administrator</USERNAME>
      <!-- other elements -->
      <PROPERTYBAG>
        <ITEM NAME="LastModifiedDate" VALUE="Fri, 05 Sep 2008 13:13:16 GMT"/>
        <ITEM NAME="Registered" VALUE="5.9.2008 16:13:16"/>
        <!-- other elements -->
      </PROPERTYBAG>
    </USER>
    <!-- more users -->
  </USERS>
</APPLICATION_NAME>

Пока что мне удалось импортировать элементы, следуя инструкциям с этого сайта: http://edoshin.skeletonkey.com/2005/10/use_modular_xsl.html

А вот XSLT, который импортирует эти элементы, но не атрибуты:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns="http://www.filemaker.com/fmpxmlresult">

<xsl:include href="FileMaker.xslt"/>

<xsl:template match="/">
  <xsl:call-template name="TABLE">
    <xsl:with-param name="METADATA-FIELDS">
      <xsl:call-template name="FIELD">
        <xsl:with-param name="NAME" select="'ID'"/>
      </xsl:call-template>
      <xsl:call-template name="FIELD">
        <xsl:with-param name="NAME" select="'USERNAME'"/>
      </xsl:call-template>
      <xsl:call-template name="FIELD">
        <xsl:with-param name="NAME" select="'ISADMINISTRATOR'"/>
      </xsl:call-template>
      <xsl:call-template name="FIELD">
        <xsl:with-param name="NAME" select="'LastModifiedDate'"/>
      </xsl:call-template>
      <xsl:call-template name="FIELD">
        <xsl:with-param name="NAME" select="'Registered'"/>
      </xsl:call-template>
    </xsl:with-param>

    <xsl:with-param name="RESULTSET-RECORDS">
      <xsl:for-each select="//USER">
        <xsl:call-template name="ROW">
          <xsl:with-param name="COLS">
            <xsl:call-template name="COL">
              <xsl:with-param name="DATA" select="ID"/>
            </xsl:call-template>
            <xsl:call-template name="COL">
              <xsl:with-param name="DATA" select="USERNAME"/>
            </xsl:call-template>
            <xsl:call-template name="COL">
              <xsl:with-param name="DATA" select="ACCOUNT/ISADMINISTRATOR"/>
            </xsl:call-template>

                <xsl:call-template name="COL">
              <xsl:with-param name="DATA" select="@Registered"/>
            </xsl:call-template>

                </xsl:with-param>
        </xsl:call-template>
      </xsl:for-each>
    </xsl:with-param>
  </xsl:call-template>
</xsl:template>

</xsl:stylesheet>

1 Ответ

2 голосов
/ 01 марта 2009

Я должен сказать, что не уверен, что понял, что вам нужно здесь.
Если я понял - вы не получаете значение

<ITEM NAME="LastModifiedDate" VALUE="Fri, 05 Sep 2008 13:13:16 GMT"/>

с помощью

<xsl:call-template name="COL">
      <xsl:with-param name="DATA" select="@Registered"/>
</xsl:call-template>

<ч /> Edit:
Если это так, попробуйте использовать ITEM / @ Registered следующим образом:

<xsl:call-template name="COL">
    <xsl:with-param name="DATA" select="PROPERTYBAG/ITEM[@NAME='Registered']/@VALUE"/>
</xsl:call-template>

вы хотите, чтобы атрибут value элемента ITEM с атрибутом name равнялся Зарегистрированному в элементе propertybag, который находится под каждым пользователем ...

<ч /> Оригинал:
Если это так, попробуйте использовать ITEM / @ Registered следующим образом:

<xsl:call-template name="COL">
     <xsl:with-param name="DATA" select="ITEM/@Registered"/>
</xsl:call-template>

вы хотите ПУНКТ, который находится под каждым пользователем ...

...