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 回答