斯潘8
斯潘4
许多用户在读取复杂的XML或GML时遇到问题。这样做的方法是使用FME的XML阅读器,要么与特征路径,它在给定的节点上查询XML,并选择扁平化,或与XFMAP它为查询XML和构建特性提供了广泛的选项。xfmaps的基本思想是,在特性映射部分指定要将XML结构中的哪个节点构成特性类型。然后在“要素内容映射”部分指定每个要素包含的内容。
然而,有时这可能很困难,因为源XML可能没有任何模式。更确切地说,在某些情况下,模式嵌入到数据本身中。
考虑以下XML:
约翰 温哥华 11-22-99 1211-09
我们可以将特性节点标识为要捕获的元素,作为我们的特性类型。然而,仅仅拥有一个名为属性的属性并不是很有用,因为我们可能会得到重复的列或列表,例如:
财产1=约翰财产2=温哥华等
更好的方法是从名称-值对动态构建模式,使名称成为属性名,值成为属性值。我们可以使用以下“顺序”xfmap来完成此操作:
‘mapping match=“property”’只选择每个属性元素。“name extract@typename”创建一个属性,该属性的名称存储在属性标记内的@typename中,并指定与同一属性元素关联的值。
所以
约翰
xfmap创建一个名为attribute1的字段,并在其中存储属性值“john”。
然后,XFMAP可以读取上述XML并从中生成以下功能:
attribute1=john attribute2=couver activedate_自=11-22-99 activedate_至=12-11-09
如果您有可选或多个几何图形,然后您需要启用聚合。我将很快在一个单独的例子中解释如何做到这一点。
假设我们想要读取下面的源XML。上面的动态模式方法允许我们读取
-123.1、49.25-122.9、49.15 约翰 温哥华 11-22-99 1211-09 -122.8、49.12-122.5、49.0 六月 萨里 02-25-05 95-10
如何添加几何图形?在我见过的大多数动态模式案例中,几何体本身并不是完全动态的。对于这种类型的XML,通常有一组已知的几何图形。每个特征可能包含或不包含每个几何图形,但是必须有一些预定义的方式来存储几何图形,否则很难合作。当然,如果每个特征都有嵌入在属性中的坐标值,FME总是可以使用2dpointreplacer将这些转换为工作台内的点。
对于这里的例子,我们只是有一个边界框,类似于我们在基本示例中的边界框。注意,我们不需要定义异常,因为第一个映射只与属性匹配,而与坐标箱不匹配,所以我们要做的就是在坐标箱上显式匹配,然后像在“基本”示例中那样构建几何体:
在我们结束之前,添加一些几何特征怎么样?从上面的源数据可以看出,几何图形具有与其关联的唯一标识符:
当每个特征具有多个几何图形,并且需要能够像GML 3.2.1中的情况一样单独标识它们时,这一点尤其重要。
我们可以使用功能图的参考图捕获该值,如下所示:
这只是告诉FME创建一个称为标识符的引用,并在读卡器遍历源XML时遇到标识符的值时将其存储在其中。然后,每当我们想要检索标识符的值时,我们将存储最后一个(后进先出)。这允许子元素在扫描父元素时检索值集。
那么,我们可以修改几何部分以包括以下特征:
不是定义属性,我们定义了一个特征,而不是提取表达式,我们使用refexpr或引用表达式来检索前面在上面的引用创建中设置的值。请注意,我们可以定义一个新的参考地图部分,而不是将其放置在要素地图中,但是,只有当我们希望能够从不是特征元素的元素或者它们内部捕获标识符时,才需要这样做。
把它们放在一起,我们现在有了一个xfmap,它将为
http://www.w3.org/1999/xlink>
?2019安全亚搏在线软件公司|合法的