lgd*_*dev 4 xpath objective-c gdataxml
我正在创建一个iOS应用程序,我在Objective C中使用GDataXML库进行xml解析.
我有以下xml(我得到的肥皂响应):
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<MakeRequestResponse xmlns="http://tempuri.org/">
<MakeRequestResult>SOMERANDOMDATAHERE012912033905345346</MakeRequestResult>
</MakeRequestResponse>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是:
当我像这样编写给定xml的xpath表达式时,我得到了MakeRequestResponse节点:
NSArray *listOfNodes = [[responseDocument rootElement] nodesForXPath:@"soap:Body/*" error:&error];
Run Code Online (Sandbox Code Playgroud)
但是,当我编写实际节点名称时,我无法获取此节点或下面的任何子节点:
NSArray *listOfNodes = [[responseDocument rootElement] nodesForXPath:@"soap:Body/MakeRequestResponse" error:&error];
Run Code Online (Sandbox Code Playgroud)
我不确定这里有什么问题.它可能是命名空间相关的问题吗?
这是一个FAQ(搜索XPath和默认命名空间).
简短的回答是,当评估XPath表达式时,假定任何未加前缀的名称都在"无名称空间"中.但是MakeRequestResponse不是"没有名称空间",因此没有被选中.
方案:
注册"http://tempuri.org/"命名空间并将前缀(比如"x:")与之关联,然后使用:
soap:Body/x:MakeRequestResponse
Run Code Online (Sandbox Code Playgroud)
或者,否则你可以有一个这样的表达式:
soap:Body/*[name() = 'MakeRequestResponse']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1438 次 |
| 最近记录: |