我知道这里和谷歌有很多答案,但我被困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" .......
答案 0 :(得分:0)
假设Name
和Namedatapoint
是静态的,您不应在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.*',