0

Xcode プロジェクトで TBXML を解析する方法については、既に知っています。しかし、よくわからない XML 構造に行き詰まっています。

これは XML 構造です。

    <CurDate Dates="27.07.2012" Date="07/27/2012">
    <Currency Kod="USD" CurrencyCode="USD">
    <Unit>1</Unit>
    <Name>AMERICA</Name>
    <CurrencyName>US DOLLAR</CurrencyName>
    <ForexBuying>1.81</ForexBuying>
    <ForexSelling>1.8187</ForexSelling>
    </Currency>
    </CurDate>

この XML 構造に関するヘルプが必要です。私のコードは次のようになります:

        TBXMLElement *elementName = [TBXML childElementNamed:@"Currency" parentElement:element];
        TBXMLElement *altinTemp = [TBXML childElementNamed:@"CurrencyName" parentElement:elementName];

これは XML の CurrencyName を取得する私の方法ですが、これでエラーが発生します。コードを参照してください:

    + (TBXMLElement*) childElementNamed:(NSString*)aName parentElement:(TBXMLElement*)aParentXMLElement{
TBXMLElement * xmlElement = aParentXMLElement->firstChild;
const char * name = [aName cStringUsingEncoding:NSUTF8StringEncoding];
while (xmlElement) {
    if (strlen(xmlElement->name) == strlen(name) && memcmp(xmlElement->name,name,strlen(name)) == 0) {
        return xmlElement;
    }
    xmlElement = xmlElement->nextSibling;
}
return nil;
}

これは、エラーが発生した場合です。エラーは「スレッド 1: EXC_BAD_ACCESS (コード = 2、アドレス = 0x10)

どんな返事でもいいです!ありがとう。

4

1 に答える 1

0

私はあなたがこのようなものが欲しいと信じています

NSError *error = nil;
TBXML* tbxml = [TBXML tbxmlWithXMLString:@"<CurDate Dates='27.07.2012' Date='07/27/2012'><Currency Kod='USD' CurrencyCode='USD'><Unit>1</Unit><Name>AMERICA</Name><CurrencyName>US DOLLAR</CurrencyName><ForexBuying>1.81</ForexBuying><ForexSelling>1.8187</ForexSelling></Currency></CurDate>" error:&error];

if (error) {
    NSLog(@"%@ %@", [error localizedDescription], [error userInfo]);
} else {
// If TBXML found a root node, process element and iterate all children
    if (tbxml.rootXMLElement){
        TBXMLElement *element = tbxml.rootXMLElement;

        if ([TBXML childElementNamed:@"Currency" parentElement:element]) {

            element = element->firstChild;

            do{
                TBXMLElement *altinTemp = [TBXML childElementNamed:@"CurrencyName" parentElement:element];
                NSString *currencyName = [TBXML textForElement:[TBXML childElementNamed:@"CurrencyName" parentElement:element]];
                NSLog(@"%@",currencyName);
            }while ((element = element->nextSibling));

            error = nil;
        } 
    }
}

代替手段

childElementNamed: parentElement:

childElementNamed: parentElement: error:

これにより、いずれかの nil ノードを処理できます (私はあなたが持っていたと思います)。エラー: TBXML クラス関数の大部分にも追加できるようです。パフォーマンスが低下するため、デバッグ時またはノード/値が存在する場合と存在しない場合にのみ使用することをお勧めします。

于 2012-08-09T10:36:27.610 に答える