kml默认名称空间与数据集默认名称空间冲突

时间:2018-11-04 07:54:15

标签: xml namespaces xquery kml

我有一个澳大利亚洗手间列表,我想使用xQuery映射到GE上以转换成KML文档。使用的数据集的默认名称空间为xmlns =“ http://toiletmap.gov.au/”。

当我执行xQuery传输时,无法根据需要提取坐标/名称/描述。但是该文档不是有效的KML文档,因为我尚未使用xmlns =“ http://earth.google.com/kml/2.1”的kml默认命名空间。

我应该如何合并两个名称空间?如果我遗漏了名称空间,则xQuery转换为空白,无法提取所需的数据。

我考虑过添加像xmlns:au =“ http://toiletmap.gov.au/”这样的前缀。但这没有帮助,即使我这样命名{data($ x / Name)}元素。

请让我知道我在做什么错,我觉得我还没有完全掌握名称空间的工作原理。

这是xQuery:

<kml xmlns="http://toiletmap.gov.au/">
 <Document>
    <Folder>
        {
          let $doc := doc("ToiletmapExport_180801_090000.xml")
          for $x in $doc/ToiletMapExport/ToiletDetails
           where $x/@Latitude <= (-34.74526121+0.25) 
                     and $x/@Latitude >= (-34.74526121-0.25)
                     and $x/@Longitude >= (146.5505775-0.25)
                     and $x/@Longitude <= (146.5505775+0.25)
                     return if (($x/AccessibilityDetails/AccessibleMale='true'
                     and $x/AccessibilityDetails/AccessibleFemale='true')
                     or $x/AccessibilityDetails/AccessibleUnisex='true') 
                     then
                <Placemark>
                    <name >{data($x/Name)}</name>
                    <description>FacilityType: {data($x/GeneralDetails/FacilityType)}<br></br>
                    Town: {data($x/Town)}<br></br>
                    Male: {data($x/AccessibilityDetails/AccessibleMale)} Female: {data($x/AccessibilityDetails/AccessibleFemale)}<br></br>
                    Unisex: {data($x/AccessibilityDetails/AccessibleUnisex)}
                    </description>
                    <Point>
                        <coordinates>{data($x/@Longitude)},{data($x/@Latitude)}</coordinates>
                    </Point>
                </Placemark>
                else ()
        }
    </Folder>
 </Document>

1 个答案:

答案 0 :(得分:0)

您还没有真正显示输入示例,但是在使用XPath和XQuery时,可以使用任何路径表达式来选择名称空间中的节点,而不必使用相同的前缀或默认名称空间(即,没有前缀)来从名称空间中选择节点。某个名称空间,重要的是使用例如declare namespace toi = "http://toiletmap.gov.au/";,然后将该前缀与例如您要从该名称空间选择输入的所有路径表达式中的$doc/au:ToiletMapExport/au:ToiletDetails。对于输出,您可以设置KML命名空间。