You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

xsltproc转换XML为GeoJSON提取gen:value报命名空间前缀错误

报错根因

触发Undefined namespace prefix错误的核心原因有两个,同时附带取值逻辑的bug:

  • XSLT文件的根节点xsl:stylesheet未声明gen前缀对应的命名空间,XPath引擎解析带gen:前缀的节点路径时,找不到对应的命名空间映射直接报错。
  • 取值路径不符合XML结构:gen:value不是bldg:Building的直接子节点,且源文件中存在多个gen:value节点,原写法既无法正确定位节点,还会取到无关属性值。
  • 原处理gen:stringAttribute的模板漏传了z参数,会导致输出GeoJSON的高度字段为空。
修复方案
  1. 在xsl:stylesheet标签中补充gen命名空间声明,取值必须和源XML中gen前缀绑定的URI完全一致:
    xmlns:gen="http://www.opengis.net/citygml/generics/2.0"
    
  2. 修正匹配规则和取值路径,精准定位name为「建物ID」的属性节点下的值,同时补上漏传的z参数,修改后的对应模板代码如下:
    <xsl:template match="bldg:Building[gen:stringAttribute[@name='建物ID']]">
        <xsl:apply-templates select="bldg:lod0RoofEdge//gml:Polygon">
            <xsl:with-param name="z" select="number(bldg:measuredHeight)" />
            <xsl:with-param name="id" select="gen:stringAttribute[@name='建物ID']/gen:value" />
        </xsl:apply-templates>
    </xsl:template>
    
执行验证

修改完成后重新运行原转换命令即可正常执行,输出的GeoJSON中buildingId字段会正确取到22203-bldg-562值:

xsltproc style.xsl 52383622_bldg_6697_op.gml > index.geojson

内容的提问来源于stack exchange,提问作者rio0810

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:12:31