span8
span4
sampleworkspace.zip
问:如何从KML
我可以在谷歌Earth的描述气球中看到属性。但是,如果我尝试用KML读取器或Data Inspector读取文件,则无法查看用户属性。
我需要做什么来加载属性到另一个文件类型,如shapefiles (shp)?
答:我们需要使用XQueryExtractor从KML文件中获取表属性。
1.让我们看看谷歌地球的源数据。它显示了一个带有属性的表。
在谷歌地球上看到的源KML
在TextEditor中打开KML文件,可以看到这个属性表嵌入到标记中,并且是用HTML编写的。
在文本编辑器中查看
2.在您的FME工作区中,添加HTMLToXHTMLConverter来将HTML转换为XHTML。这确保了标签包含有效的XHTML,并且元素被正确嵌套。
HTMLToXHTMLConverter参数
3.添加XQueryExtractor。输入以下XQuery表达式来解析
声明默认元素名称空间“http://www.w3.org/1999/xhtml”;fme:set-attribute($x/td[1]/text(),$x/td[2]/text())
如果您正在寻找关于XQuery的教程,请访问W3Schools.
XQueryExtractor参数
4.连接到数据检查器。
FME工亚搏在线作流
5.查看数据检查器中的特性。
结果:属性名和属性值在检查器中公开。
6.公开的属性。如果您希望稍后在工作流中使用这些属性或将它们写入目标数据集,则可能需要公开它们。亚搏在线这可以通过在XMLXQueryExtractor之后使用attributeexpoer转换器或在XMLXQueryExtractor内使用Expose Attributes参数来实现。
最多可使用10个附件(包括图片),每个附件不得超过4.0 MB,总附件不得超过4.0 MB。
谢谢,这是一个很好的例子!然而,并不是每一个*kml都像这样很好地结构。在我的例子中, < >强传感器< / >强:树脂黄< br / > <强> < / >强模式:FBS8 < br / > < >强劲处理器< / >强:JAXA < br / > 假设需要修改Xquery表达式,但是如何修改呢? 如果我的描述不清楚,请查收附件kml。如果能提供一些提示和示例,从这个kml中提取属性,将不胜感激。亲切的问候,克里斯。 XQueryExtractor需要特定的XQuery表达式,通常对于html表,您可以尝试使用特性path = 'tr'的xmlflater,它将以row.column的形式将描述表的行平铺到它的组件字段中。但是,我查看了您的kml,注意到数据不是存储在html表中,而是存储在一个大的文本字段中。因此,您必须使用文本处理来提取您想要的值。我会跟进你的支持案例,进一步解释这一点。 这是一个很好的例子,但由于某些原因,它对我不起作用,尽管我的数据结构非常相似。我发现这确实有效。 //tr提取行,不管前面是什么,这非常方便,因此实际上不需要计算结构。 由于未知的原因,where(exists())部分是必要的。没有where子句的任何尝试都没有返回结果。比较子句删除了NULL参数,这些参数在我的数据中被格式化为<>。我不确定这是KML标准还是我的数据集特有的。 我还发现,我必须公开想要保留的属性,并将它们添加到目标中。这使得_results字段有意义。 希望这能帮助到某人… 谢谢你的例子。 我还有一个与本例不同格式的kml。我尝试了XQueryExtractor和XML flater,但都无法提取属性。我想知道是否有人可以帮助我得到正确的查询拉出名称和属性从以下xml格式: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/1999/xhtml " > 身体< > ©2019 S亚搏在线afe Software Inc |法律和一个单元格 ,值由冒号":"分隔,断点
类似于这样:
alpsrp054196840.kml
(22.0 kB)
声明默认元素名称空间“http://www.w3.org/1999/xhtml”;$ x在/ / tr(存在($ x / td[1])和比较($ x / td [2] / text(),“& lt; Null>”))返回fme:设置一个属性($ x / td [1] / text (), $ x / td [2] / text ())
很好的例子。在我的例子中,XQuery不适合我。
这是KML的结构(见吹)
有什么建议吗?
kml_description (encoded: UTF-16LE): http://www.w3.org/1999/XSL/Format"> .
身体< >
< tr背景= " ffffff " >
< th宽度= " 370 "对齐=“左”> < / th >
< th宽度= " 370 "对齐=“左”> < / th >
< / tr >
< tr >
< td背景= " # ffffff " >人孔ID < / td >
< td > 50283792 < / td >
< / tr >
< tr >
< td背景= " # ffffff " > < / td >生命周期
< td >在职td > < /
< / tr >
< tr >
< td背景= " # ffffff " >人孔大小< / td >
< td > < / td >
< / tr >
< tr >
< td背景= " # ffffff " >安装日期< / td >
< td > 1/1/1111 td > < /
< / tr >
< tr >
< td背景= " # ffffff " >图纸编号< / td >
< td > mhe2 - 009 - 552 < / td >
< / tr >
< tr >
网格< td背景= " # ffffff " > < / td >
< td > 4030420 < / td >
< / tr >
< /表> < br > < /身体>
< / html >
嗨@davidalvarez76,
您可以试试下面的XQuery吗?如果它不工作,您是否介意共享您的KML文件,将允许我对实际的KML进行测试。您也可以尝试上面的建议,即“您可以尝试具有特性path = 'tr'的xmlflater,它将以row.column的形式将您的描述表行平铺到它的组件字段中。”
声明默认元素名称空间“http://www.w3.org/1999/xhtml”;set-attribute($x/td[1]/text(),$x/td[2]/text()))
.在/html/body/table/tr中
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< >头
<标题> < /名称>
> < /头
< b > V18279201018990_000.jpg < / b > < br / >
纬度:<我> < / i > 37.424416°< br / >
<我>经度:< / i > -82.930091°< br / >
<我>:< / i > -15.832788°< br / >
<我>,< / i > 1.726352°< br / >
<我>标题:< / i > 161.467052; < br / >
<我>高度:230.000 < / i > < br / >
GPS周秒: 591967.285977;0.000
身体< / >
< / html >