原文发布时间:2012-07-30
作者:毛毛虫
对于基于web和开放标准数据,XML变得越来越普遍,XML用于CAD或GIS数据比较麻烦。这是因为GIS数据基本上是扁平的、表格的或关系的,而XML是嵌套的或面向对象的。为了整合XML数据到自己的系统上,需要克服这个挑战。FME的最新一些版本致力于使得FME读取XML更轻松。
这一部分内容就是针对XML的读取。
加载读模块后,数据格式选择XML,打开XML的格式的参数选项,可以看到参数如下:
参数:Select Configuration Type(选择配置类型)
这个参数指定使用读取XML数据集的方式,包括:Feature Paths、xfMap和XRS方式。
使用Feature Paths方式,转化所有的XML元素到FME要素中。使用flattening选项把嵌套的结构转换为字段。父ID被记录所以可以建立关联。所以不需要任何其他的脚本就可以读取XML。
1)Feature Paths方式。使用Feature Paths和flattenting,定义想要提取的XML结构的点(节点或要素),可以查询XML。Flattening可以在选中的XML要素中把嵌套的结构转换为父.子的形式。记录父ID建立关联。所以不需要xfmaps和其他脚本,就可以读取XML。
使用Feature Paths的方法是:
在添加读模块对话框中,选择XML格式,指定XML文件后,在读模块参数中,设置configuration type = "Feature Paths"。在"elements to match"中指定想要生成要素类型的节点。或者使用*将所有的节点生成要素(在较大的或复杂的数据集中需要小心使用)。想要显示该节点中所有子节点的值,需要将Flatten Options参数中的Enable Flattening勾选(Flatten Options各个参数的具体换衣将在后面详细介绍)。
下面是使用Feature Paths方式读取的示例:
如XML的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<FeatureCollection>
<Contact>
<name>John</name>
<city>Vancouver</city>
<activeDate>
<from>11-22-99</from>
<to>12-11-09</to>
</activeDate>
<Coordinate_BOX id="101">
<coords><coord>-123.1,49.25</coord><coord> -122.9,49.15</coord></coords>
</Coordinate_BOX>
</Contact>
<Contact>
<name>June</name>
<city>Surrey</city>
<activeDate>
<from>02-25-05</from>
<to>9-15-10</to>
</activeDate>
<Coordinate_BOX id="102">
<coords><coord>-122.8,49.12</coord><coord>-122.5,49.0</coord></coords>
</Coordinate_BOX>
</Contact>
</FeatureCollection>
设置configuration type = "Feature Paths"后,在"elements to match"中指定Contact,生成的要素类型为Contact,有两条记录,属性字段如下:
name
city
activeDate.from
activeDate.to
Coordinate_BOX.id
Coordinate_BOX.coords.coord{}
设置configuration type = "Feature Paths"后,在"elements to match"中指定*,生成的要素类型为:
Contact
Coordinate_BOX
FeatureCollection
activeDate
city
coord
coords
from
name
to
每个要素各有生成两条记录。
这个处理不能保护原始的XML结构。‘flattening’意味着会强行将XML的结构降级为类似于表的结构。这是不可逆的。如果读取XML仅仅是想更新一些域,最好使用带XQuery查询的XMLUpdater或 XQueryUpdater 转换器。另一种方法是使用xfmaps得到想要的域值,再用XMLTemplates重构XML,不过需要做更多的工作。
未完待续……