gpt4 book ai didi

objective-c - NSXML 添加命名空间以使 XPath 查询工作

转载 作者:行者123 更新时间:2023-12-03 16:47:30 26 4
gpt4 key购买 nike

如果在文档中定义了 XMLNS 属性,我遇到了一个问题,即我的 XPath 查询不起作用。我发现这可能是因为所有元素都使用默认的 XMLNS,而我的 XPath 不是。但是,我在 NSXML(用于描述和解析 XML 文档的通用 Objective C 类族)中找不到任何合适的方法来解决该问题。

例如,如果 data,以下代码可以正常工作不包含 XMLNS。如果可以,如何使代码正常工作?

NSXMLDocument *xml = [[NSXMLDocument alloc] initWithData:data options:0 error:&error];   
NSArray *result = [xml nodesForXPath:@"/parent/child" error:&error];

最佳答案

我刚刚花了一些时间处理类似的问题(Google 的 KML 文件)。您的问题可能是由于命名空间问题。当您设置命名空间映射时,给命名空间一个键,然后在您的 XPath 表达式中为您的选择器添加前缀,该键后跟一个冒号 (:)。此解决方案使用整洁的 TouchXML library 中的 CXMLDocuments 和 CXMLElements .

从一个简单的例子开始,假设您的 XML 是:

<books xmlns="http://what.com/ever">
<book>
<title>Life of Pi</title>
</book>
<book>
<title>Crime and Punishment</book>
</book
</books>

您将选择所有书籍:
// So, assuming you've already got the data for the XML document
CXMLDocument* xmldoc = [[CXMLDocument alloc] initWithData:xmlDocData options:0 error:nil];
NSDictionary *namespaceMappings = [NSDictionary dictionaryWithObjectsAndKeys:@"http://what.com/ever", @"nskey", nil];
NSError *error = nil;
NSArray *bookElements = [xmldoc nodesForXPath:@"/nskey:books/nskey:book" namespaceMappings:mappings error:&error];

请注意,您需要为每个元素添加前缀,而不仅仅是声明命名空间的元素。

关于objective-c - NSXML 添加命名空间以使 XPath 查询工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6487186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com