将复杂的XML数据导入多个FileMaker表
我了解导入到FileMaker(csv、xml)的基本知识,并对XSLT略知一二 我有一个包含需要导入FileMaker的列表的数据集。这有3个表-主表、数据点表和位置表。我的数据如下所示:将复杂的XML数据导入多个FileMaker表,xml,xslt,import,filemaker,Xml,Xslt,Import,Filemaker,我了解导入到FileMaker(csv、xml)的基本知识,并对XSLT略知一二 我有一个包含需要导入FileMaker的列表的数据集。这有3个表-主表、数据点表和位置表。我的数据如下所示: <?xml version="1.0" encoding="ISO-8859-1"?> <result> <data mode="test" ram="on"> 33,869 34,115 46,074 225,233, E 22
<?xml version="1.0" encoding="ISO-8859-1"?>
<result>
<data mode="test" ram="on">
33,869
34,115
46,074
225,233, E
226,122, E
235,763, E
237,408, E
237,722, E
242,503
256,271
273,741
</data>
<statistics>
<positions>
<position id="1" unit="c">0,00</position>
<position id="2" unit="c">5,05</position>
<position id="3" unit="c">14,30</position>
<position id="4" unit="c">23,47</position>
</positions>
</statistics>
</result>
33,869
34,115
46,074
225233,E
226122,E
235763,E
237408,E
237722,E
242,503
256,271
273,741
0,00
5,05
14,30
23,47
如何一次性将此XML导入FM?我知道我需要将其转换为fmpxmlresult,但我所阅读的所有内容都假设XML本质上是一个奇特的CSV——没有相关/子行的单独行
是的,位置数据是正确的XML化的,数据是换行分隔的,我知道这不是XML方式,而是我接收数据的方式
我能做些什么让我的用户更容易做到这一点吗?如果绝对必要,我可以在FileMaker之外预处理数据,但如果可能,我希望避免这样做
(从这个问题中分离出来——这个问题包含了这个问题的简化版本和一个无关的其他问题,有人说我应该一次问一个问题)导入程序仍然如我在关于您链接的问题的回答中所述。您需要在导入期间指定一个XSLT文件,以便将XML转换为FileMaker的模式。这对于一个简单的源文件来说不是很困难,但仍然是必要的。导入过程仍然如我在回答您链接到的问题时所述。您需要在导入期间指定一个XSLT文件,以便将XML转换为FileMaker的模式。这对于一个简单的源文件来说不是很困难,但仍然是必需的。要将
位置
导入一个包含位置ID
、单位
和值
字段的表中,可以使用以下样式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.filemaker.com/fmpxmlresult">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/result">
<FMPXMLRESULT>
<METADATA>
<FIELD NAME="PositionID"/>
<FIELD NAME="Unit"/>
<FIELD NAME="Value"/>
</METADATA>
<RESULTSET>
<xsl:for-each select="statistics/positions/position">
<ROW>
<COL>
<DATA>
<xsl:value-of select="@id"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="@unit"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="."/>
</DATA>
</COL>
</ROW>
</xsl:for-each>
</RESULTSET>
</FMPXMLRESULT>
</xsl:template>
</xsl:stylesheet>
要将
位置
导入带有位置ID
、单位
和值
字段的表中,可以使用以下样式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.filemaker.com/fmpxmlresult">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/result">
<FMPXMLRESULT>
<METADATA>
<FIELD NAME="PositionID"/>
<FIELD NAME="Unit"/>
<FIELD NAME="Value"/>
</METADATA>
<RESULTSET>
<xsl:for-each select="statistics/positions/position">
<ROW>
<COL>
<DATA>
<xsl:value-of select="@id"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="@unit"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="."/>
</DATA>
</COL>
</ROW>
</xsl:for-each>
</RESULTSET>
</FMPXMLRESULT>
</xsl:template>
</xsl:stylesheet>
以下是如何为用户简化三重导入:
- 创建一个全局容器
- 将其放置在布局上(或专门用于此流程的临时布局上)
- 在脚本中,使用“插入文件脚本”步骤让用户选择文件
- 将其设置为始终插入引用,无需压缩,无需选择
- 然后,您可以获取容器的文本并将路径提取到变量$filePath中
- 之后,您可以使用变量$filePath指定继续导入中的文件,并将其设置为无对话框运行
我不知道为什么这个答案被否决了。这是一个如何解决一次选择一个源文件但执行两次导入的相应问题的建议,正如海报在对上述解决方案的反应中所问的那样。以下是如何为用户简化三次导入:
- 创建一个全局容器
- 将其放置在布局上(或专门用于此流程的临时布局上)
- 在脚本中,使用“插入文件脚本”步骤让用户选择文件
- 将其设置为始终插入引用,无需压缩,无需选择
- 然后,您可以获取容器的文本并将路径提取到变量$filePath中
- 之后,您可以使用变量$filePath指定继续导入中的文件,并将其设置为无对话框运行
我不知道为什么这个答案被否决了。这是一个如何解决一次选择一个源文件但执行两次导入的相应问题的建议,正如海报在对上述解决方案的反应中所问的那样。请发布一个完整的(即使是最小的)输入XML示例。您显示的内容缺少根元素,
开始标记是孤立的。还要明确您希望导入到哪里的内容,以及需要如何链接;ATM我看不到位置
和数据
@michael.hor257k之间有任何联系。我可以相对自由地将其导入到哪里。是的,位置和数据没有连接,它们只是属于同一个结果集。您仍然没有说要导入到哪里。数据点似乎每个都有一个或两个三个值-这是对模式
和ram
属性的补充。我想导入所有数据。我并不特别关心我的FM表需要如何,因为我可以控制它,并且可以以任何需要的方式构建它们。是的,我收到的数据与示例中的一样,尽管这是一个或两个元素-欧洲符号,5,05是五点零五,而不是两个逗号分隔的记录。在编写填充它的XSLT样式表之前,您需要了解目标表的结构。请发布输入XML的完整(即使是最小的)示例。您显示的内容缺少根元素,
开始标记是孤立的。还要明确您希望导入到哪里的内容,以及需要如何链接;ATM我看不到位置
和数据
@michael.hor257k之间有任何联系。我可以相对自由地将其导入到哪里。是的,位置和数据没有连接,它们只是属于同一个结果集。您仍然没有说要导入到哪里。数据点似乎每个都有一个或两个三个值-这是对模式
和ram
属性的补充。我想导入所有数据。我并不特别关心我的FM表需要如何,因为我可以控制它,并且可以以任何需要的方式构建它们。是的,我收到的数据和示例中一样,虽然是一个或两个元素-欧洲符号,5,05是五点零五,不是两个逗号分隔的rec