如何用XPath提取XML中Latitude与Longitude的组合值?
提取Locations节点的经纬度组合值
先假设你的XML结构示例如下(方便对应表达式):
<Root> <Locations> <Latitude>39.9042</Latitude> <Longitude>116.4074</Longitude> </Locations> <Locations> <Latitude>31.2304</Latitude> <Longitude>121.4737</Longitude> </Locations> </Root>
分XPath版本的解决方案
XPath 1.0
XPath 1.0本身不支持直接返回结构化的经纬度对,但可以通过两种方式实现需求:
先获取Locations节点再提取子值:
使用表达式定位所有Locations节点://Locations拿到每个节点后,在宿主代码(比如XSLT、Python的lxml库)中分别读取
Latitude和Longitude的文本值,组合成单个结果项。直接拼接成字符串(部分工具支持):
利用concat函数拼接经纬度://Locations/concat(Latitude, ', ', Longitude)执行后会返回每个Locations对应的
"纬度, 经度"格式字符串列表。
XPath 2.0+
XPath 2.0及以上支持更灵活的序列和字符串处理:
返回拼接好的字符串序列:
使用string-join函数组合经纬度://Locations/string-join((Latitude, Longitude), ', ')结果会是包含所有经纬度对的字符串序列,比如
("39.9042, 116.4074", "31.2304, 121.4737")。返回经纬度节点序列:
如果需要保留节点结构,可使用://Locations/(Latitude, Longitude)返回的节点按
Locations分组排列,每两个节点对应一组经纬度。
关键注意事项
- 如果XML包含命名空间,必须先绑定对应前缀,比如XML有
xmlns="http://example.com",则表达式要写成//ns:Locations(ns为绑定的前缀)。 - 避免滥用
//全局匹配,如果Locations节点有固定父节点,用精确路径(比如/Root/Locations)可以避免匹配到无关节点。
内容的提问来源于stack exchange,提问作者Rob See
相关产品推荐
相关产品推荐

