目的を使用したTBXML解析-c
-
26-10-2019 - |
質問
TBXMLを使用して、以下のXMLを解析しようとしています。すべてのアイテムタグ値を含む配列を作成したい。 「アイテム」タグを通過するにはどうすればよいですか?
<root>
<item>
<northeast_area>
<item>
<new_england_north xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[8]">
<item xsi:type="xsd:string">boston s, ma</item>
<item xsi:type="xsd:string">providence, ri</item>
<item xsi:type="xsd:string">boston, ma </item>
<item xsi:type="xsd:string">portland, me</item>
<item xsi:type="xsd:string">boston, ma </item>
<item xsi:type="xsd:string">boston central</item>
<item xsi:type="xsd:string">boston north, ma</item>
<item xsi:type="xsd:string">boston south, ma</item>
</new_england_north>
</item>
<item>
<upstate_new_york xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[6]">
<item xsi:type="xsd:string">binghampton, ny</item>
<item xsi:type="xsd:string">rochester, ny</item>
<item xsi:type="xsd:string">albany s, ny</item>
<item xsi:type="xsd:string">syracuse, ny</item>
<item xsi:type="xsd:string">albany, ny</item>
<item xsi:type="xsd:string">buffalo, ny</item>
</upstate_new_york>
</item>
</northeast_area>
</item>
解決
これは、ファイルからXMLを読み取るサンプルコードです。それを微調整して、利用可能なNSSTRING/NSDATAオブジェクトを使用できます。 ノート 石鹸の呼び出しが返すことができる正確な潜在的な形式がわからないので、これはそれほど堅牢ではありません、 これは、提供されたデータに有効なソリューションです。
int main (int argc, const char * argv[])
{
@autoreleasepool {
NSString* path = @"/Path/To/Your/File";
NSData *contents = [[NSFileManager defaultManager] contentsAtPath:path];
TBXML *xml = [TBXML tbxmlWithXMLData:contents];
TBXMLElement *rootElement = [xml rootXMLElement];
TBXMLElement *rootItemElem = [TBXML childElementNamed:@"item" parentElement:rootElement];
while (rootItemElem != nil) {
TBXMLElement *areaElement = rootItemElem->firstChild;
while (areaElement != nil) {
TBXMLElement *areaItemElement = [TBXML childElementNamed:@"item" parentElement:areaElement];
while (areaItemElement != nil) {
TBXMLElement *localeItem = areaItemElement->firstChild;
NSLog(@"Checking locale %s", localeItem->name);
TBXMLElement *specificItem = [TBXML childElementNamed:@"item" parentElement:localeItem];
while (specificItem != nil) {
NSLog(@"Item with value: %@", [TBXML textForElement:specificItem]);
specificItem = [TBXML nextSiblingNamed:@"item" searchFromElement:specificItem];
}
areaItemElement = [TBXML nextSiblingNamed:@"item" searchFromElement:areaItemElement];
}
areaElement = areaElement->nextSibling;
}
rootItemElem = [TBXML nextSiblingNamed:@"item" searchFromElement:rootItemElem];
}
}
return 0;
}
および出力:
2011-10-19 08:20:40.321 Testing[14768:707] Checking locale new_england_north
2011-10-19 08:20:40.323 Testing[14768:707] Item with value: boston s, ma
2011-10-19 08:20:40.323 Testing[14768:707] Item with value: providence, ri
2011-10-19 08:20:40.324 Testing[14768:707] Item with value: boston, ma
2011-10-19 08:20:40.324 Testing[14768:707] Item with value: portland, me
2011-10-19 08:20:40.325 Testing[14768:707] Item with value: boston, ma
2011-10-19 08:20:40.326 Testing[14768:707] Item with value: boston central
2011-10-19 08:20:40.326 Testing[14768:707] Item with value: boston north, ma
2011-10-19 08:20:40.327 Testing[14768:707] Item with value: boston south, ma
2011-10-19 08:20:40.327 Testing[14768:707] Checking locale upstate_new_york
2011-10-19 08:20:40.328 Testing[14768:707] Item with value: binghampton, ny
2011-10-19 08:20:40.328 Testing[14768:707] Item with value: rochester, ny
2011-10-19 08:20:40.329 Testing[14768:707] Item with value: albany s, ny
2011-10-19 08:20:40.329 Testing[14768:707] Item with value: syracuse, ny
2011-10-19 08:20:40.330 Testing[14768:707] Item with value: albany, ny
2011-10-19 08:20:40.330 Testing[14768:707] Item with value: buffalo, ny
これを使用すると、 NSArray
アイテムを保存するか、作成します NSArray
各ロケールに対して、アイテムをそのように分離します。 (それらをAnに保存します NSDictionary
ロケールでキー化されています。)
所属していません StackOverflow