如何将XML中的经纬度值合并为单个元素值?
实现XML经纬度合并的解决方案
嘿,这个需求用XSLT就能轻松搞定!我给你一步步拆解怎么实现:
核心思路
用XSLT(可扩展样式表语言转换)遍历XML文档,找到Longitude和Latitude节点,将它们的文本值用逗号拼接,生成新的<cordinate-point>元素,同时移除原来的两个经纬度节点,保留其他所有内容不变。
具体实现代码
输入示例XML
<root> <SomeOtherElement>其他内容</SomeOtherElement> <Longitude>-0.30365</Longitude> <Latitude>51.61965</Latitude> <AnotherElement>更多内容</AnotherElement> </root>
XSLT转换模板
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 身份模板:默认拷贝所有节点/属性,保证其他内容不受影响 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 匹配包含经纬度的父节点,替换经纬度为新的坐标元素 --> <xsl:template match="*[Longitude and Latitude]"> <xsl:copy> <!-- 先处理父节点下除经纬度外的其他子元素 --> <xsl:apply-templates select="node()[not(self::Longitude or self::Latitude)]"/> <!-- 生成新的坐标元素,拼接经纬度值 --> <cordinate-point> <xsl:value-of select="Longitude"/> <xsl:text>,</xsl:text> <xsl:value-of select="Latitude"/> </cordinate-point> </xsl:copy> </xsl:template> </xsl:stylesheet>
关键说明
- 第一个模板是身份模板,作用是原样拷贝XML中所有未被特殊匹配的节点,确保其他元素、属性都能保留。
- 第二个模板专门匹配同时包含
Longitude和Latitude的父节点:- 先处理父节点里除了经纬度的所有子元素;
- 生成
<cordinate-point>元素,把两个经纬度的值用逗号连接起来。
- 如果你的经纬度有固定的父节点(比如
<Location>),可以把match="*[Longitude and Latitude]"改成match="Location",这样匹配更精准。
如何运行转换
你可以用任意XSLT处理器(比如Saxon、Xalan),或者在线XML转换工具,把输入XML和上面的XSLT模板导入,就能得到目标结果啦~
内容的提问来源于stack exchange,提问作者Gotham Knight
相关产品推荐
相关产品推荐

