iOS:NSXMLParser - 很多属性

时间:2016-02-02 22:42:12

标签: ios objective-c xml attributes nsxmlparser

我知道这里和谷歌有很多答案,但我被困3天以后想出如何处理我的问题。我希望有人能给我一个很好的建议。

我的XML中的所有内容都是属性。它们被解析为attributeDict。现在我尝试使用(void)parser:(NSXMLParser *)parser didStartElement....处理属性,稍后在TableView中显示它们。

我已将属性放入NSMutableArray并希望显示设备名称及其频道和数据点的值。后来我想用一个按钮改变daterpoint的值。但我不确定这是否是我尝试的最佳方式。我发现这篇文章有NSPredicate。这可能是正确的方法吗?非常感谢提前!

NSXMLParser delegates Handling Attributes

这是我的代码:

- (void)parser:(NSXMLParser *)parser didStartElement....

 if(![elementName isEqual:@"device"])
        return;
    Name = [[NSMutableArray alloc] init];
    NSString * name = [attributeDict objectForKey:@"name"];
    [Name addObject:name];

    if(![elementName isEqual:@"device"])
        return;
    Namedatapoint = [[NSMutableArray alloc] init];
    NSString * datapoint = [attributeDict objectForKey:@"ise_id"];
    [Namedatapoint addObject:datapoint];

...

这是我的xml的一部分:

<stateList>
<device name="Fußbodenheizung" ise_id="1418" unreach="false" sticky_unreach="false" config_pending="false">

<channel name="HM-LC-Sw4-DR MEQ0213526:1" ise_id="1443" visible="true" operate="true">
<datapoint name="BidCos-RF.MEQ0213526:1.STATE" type="STATE" ise_id="1447" value="false" valuetype="2" valueunit="" timestamp="1454260698" operations="7"/>
</channel>
<channel name="HM-LC-Sw4-DR MEQ0213526:2" ise_id="1449" visible="true" operate="true">
<datapoint name="BidCos-RF.MEQ0213526:2.STATE" type="STATE" ise_id="1453" value="false" valuetype="2" valueunit="" timestamp="1454260785" operations="7"/>
</channel>
<channel name="HM-LC-Sw4-DR MEQ0213526:3" ise_id="1455" visible="true" operate="true">
<datapoint name="BidCos-RF.MEQ0213526:3.STATE" type="STATE" ise_id="1459" value="false" valuetype="2" valueunit="" timestamp="1454260786" operations="7"/>
</channel>
<channel name="HM-LC-Sw4-DR MEQ0213526:4" ise_id="1461" visible="true" operate="true">
<datapoint name="BidCos-RF.MEQ0213526:4.STATE" type="STATE" ise_id="1465" value="false" valuetype="2" valueunit="" timestamp="1454260786" operations="7"/>
</channel>
</device>
<device name="HM-CC-RT-DN MEQ0807085" .......

1 个答案:

答案 0 :(得分:0)

假设NameNamedatapoint是静态的,您不应在alloc init parser:didStartElement device。这样做会在每次找到新的parser:didStartElement时删除以前的数据。

如果你不想在... if (!Name) { Name = [[NSMutableArray alloc] init]; } ... 中继续分配,那就懒得做:

return CMap::mergeArray(

require(dirname(__FILE__).'/main.php'),
array(
    'import'=>array(
    'application.vendor.authorize.*',
            'application.vendor.authorize.lib.*',
            'application.vendor.authorize.lib.shared.*',