我有一个具有以下结构的XML,我正在尝试从此创建我的模型对象.有人可以帮我找到一种方法,使用TouchXML,NSMutableArray和NSMutableDictionay从XML中获取这些对象.
<?xml version="1.0" encoding="utf-8"?>
<response>
<level1_items>
<level1_item>
<item_1>text</item_1>
<item_2>text</item_2>
</level1_item>
<level1_item>
<item_1>some text</item_1>
<item_2>some more text</item_2>
</level1_items>
<items>
<item>
<child_items>
<child_item>
<leaf1>node text</leaf1>
<leaf2>leaf text</leaf2>
<leaf3>some text</leaf3>
</child_item>
<child_item>
<leaf1>text</leaf1>
<leaf2>leaf text</leaf2>
<leaf3>more text</leaf3>
</child_item>
</child_items>
</item>
<item>
<child_items>
<child_item>
<leaf1>node text</leaf1>
<leaf2>leaf text</leaf2>
<leaf3>some text</leaf3>
</child_item>
<child_item>
<leaf1>text</leaf1>
<leaf2>leaf text</leaf2>
<leaf3>more text</leaf3>
</child_item>
</child_items>
</item>
</items>
</response>
Run Code Online (Sandbox Code Playgroud)
我需要解析它<response>和它的孩子.
首先,我不得不说你的XML很难处理,因为你试图为列表中的每个项目使用特定的标记.例如:
<level1_items>
<level1_item>
<item_1>text</item_1>
<item_2>text</item_2>
</level1_item>
<level1_item>
<item_1>some text</item_1>
<item_2>some more text</item_2>
</level1_items>
Run Code Online (Sandbox Code Playgroud)
名为<item_ 1>,<item_ 2>的标签没有意义,因为XML旨在描述您的数据,而不是定义它.如果你有一个实体,称为一个项目,你应该叫它项目,使XML是这样的:
<level1_items>
<level1_item>
<item index="1">text</item>
<item index="2">text</item>
</level1_item>
<level1_item>
<item index="1">some text</item>
<item index="2">some more text</item>
</level1_items>
Run Code Online (Sandbox Code Playgroud)
每个项目都有一个索引.就此而言,您可以在TouchXML CXMLDocument中加载文档并使用XPath获取所需的节点,并假设它们的顺序正确,忽略了我指定的index =参数.
下一个问题是将XML转换为NSDictioanry或NSArray的词典是一项非常复杂的任务,你获得的是不值得的.只需将XML加载到CXMLDocument中,然后使用XPath开始获取节点.像这样的东西:
CXMLDocument *doc = [[CXMLDocument alloc] initWithXMLString:xmlString options:0 error:nil];
// Returns all 'level1_item' nodes in an array
NSArray *nodes = [[doc rootElement] nodesForXPath:@"//response/level1_items/level1_item" error:nil];
for (CXMLNode *itemNode in nodes)
{
for (CXMLNode *childNode in [itemNode children])
{
NSString *nodeName = [childNode name]; // should contain item_1 in first iteration
NSString *nodeValue = [childNode stringValue]; // should contain 'text' in first iteration
// Do something with the node data.
}
}
Run Code Online (Sandbox Code Playgroud)
我建议尝试以这种方式使用XML,然后回到这里并在遇到问题时询问具体问题.
| 归档时间: |
|
| 查看次数: |
3232 次 |
| 最近记录: |