XML文件的读取(一)

原文发布时间: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。

扫描二维码关注公众号,回复: 1796133 查看本文章

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,不过需要做更多的工作。

 

 

 

未完待续……





猜你喜欢

转载自blog.csdn.net/fmechina/article/details/80846351