宏表达式

KML文件解析
本文介绍了一种使用Objective-C解析KML文件的方法。该方法通过定义元素类型宏来识别不同的KML元素,并根据这些元素更新相应的KML对象模型。具体包括处理样式、地标、几何图形等元素。

 

 

在方法头上通过

 

#define ELTYPE(typeName) (NSOrderedSame == [elementName caseInsensitiveCompare:@#typeName])

的写法,在方法里面的实用

 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName

                                        namespaceURI:(NSString *)namespaceURI

                                       qualifiedName:(NSString *)qName

                                          attributes:(NSDictionary *)attributeDict

{

    NSString *ident = [attributeDict objectForKey:@"id"];

 

    KMLStyle *style = [_placemark style] ? [_placemark style] : _style;

 

    // Style and sub-elements

    if (ELTYPE(Style)) {

        if (_placemark) {

            [_placemark beginStyleWithIdentifier:ident];

        } else if (ident != nil) {

            _style = [[KMLStyle alloc] initWithIdentifier:ident];

        }

    } else if (ELTYPE(PolyStyle)) {

        [style beginPolyStyle];

    } else if (ELTYPE(LineStyle)) {

        [style beginLineStyle];

    } else if (ELTYPE(color)) {

        [style beginColor];

    } else if (ELTYPE(width)) {

        [style beginWidth];

    } else if (ELTYPE(fill)) {

        [style beginFill];

    } else if (ELTYPE(outline)) {

        [style beginOutline];

    }

    // Placemark and sub-elements

    else if (ELTYPE(Placemark)) {

        _placemark = [[KMLPlacemark alloc] initWithIdentifier:ident];

    } else if (ELTYPE(Name)) {

        [_placemark beginName];

    } else if (ELTYPE(Description)) {

        [_placemark beginDescription];

    } else if (ELTYPE(styleUrl)) {

        [_placemark beginStyleUrl];

    } else if (ELTYPE(Polygon) || ELTYPE(Point) || ELTYPE(LineString)) {

        [_placemark beginGeometryOfType:elementName withIdentifier:ident];

    }

    // Geometry sub-elements

    else if (ELTYPE(coordinates)) {

        [_placemark.geometry beginCoordinates];

    } 

    // Polygon sub-elements

    else if (ELTYPE(outerBoundaryIs)) {

        [_placemark.polygon beginOuterBoundary];

    } else if (ELTYPE(innerBoundaryIs)) {

        [_placemark.polygon beginInnerBoundary];

    } else if (ELTYPE(LinearRing)) {

        [_placemark.polygon beginLinearRing];

    }

 

}

 

 

 

在WPS中使用JS处理正则表达式是一种有效的方法,可以用于复杂的文本提取和替换操作。WPS Office支持通过其编辑器编JavaScript代码来实现自定义功能,这使得用户能够利用正则表达式进行高级数据处理。 ### 正则表达式的基本用法 在JavaScript中,正则表达式可以通过字面量或者`RegExp`构造函数创建。例如: - 使用字面量: ```javascript let pattern = /abc/; ``` - 使用`RegExp`构造函数: ```javascript let pattern = new RegExp('abc'); ``` 对于动态生成的模式,通常会使用`RegExp`构造函数,因为它允许你传入变量作为参数[^1]。 ### 提取匹配内容 为了从字符串中提取符合特定模式的内容,可以使用`match()`方法。这个方法接受一个正则表达式对象,并返回所有匹配的结果数组。如果没有任何匹配项,则返回`null`。 ```javascript function RegExpMatch(text, pattern) { let regex = new RegExp(pattern, 'g'); // 'g'标志表示全局搜索 return text.match(regex); } // 示例调用 let result = RegExpMatch("示例文本123,更多示例456", "\\d+"); console.log(result); // 输出: ["123", "456"] ``` 在这个例子中,我们定义了一个名为`RegExpMatch`的函数,它接收两个参数:要搜索的文本和正则表达式的模式。该函数创建了一个带有全局标志的正则表达式对象,并调用了`match()`方法来获取所有的数字序列[^1]。 ### 替换匹配内容 如果你想要替换文本中的某些部分,你可以使用`replace()`方法。此方法同样接受正则表达式对象以及替换值或函数,并返回新的字符串。 ```javascript function RegExpReplace(text, pattern, replacement) { let regex = new RegExp(pattern, 'g'); return text.replace(regex, replacement); } // 示例调用 let updatedText = RegExpReplace("示例文本123,更多示例456", "\\d+", "[数字]"); console.log(updatedText); // 输出: "示例文本[数字],更多示例[数字]" ``` 这里定义了`RegExpReplace`函数,它将输入文本中所有与给定模式匹配的部分替换成指定的字符串。在这个案例里,所有的数字都被替换成了"[数字]"标记。 ### 加载插件 为了确保这些自定义函数可以在每次启动WPS Excel时自动可用,你需要将它们保存为`.xlam`文件格式(一种Excel加载项)。随后,在WPS Excel中添加这个加载项,这样就可以跨所有工作簿使用这些而无需每次都手动打开文件[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值