首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TBXML XML格式

TBXML XML格式
EN

Stack Overflow用户
提问于 2012-07-29 02:53:31
回答 1查看 738关注 0票数 0

我已经熟悉了如何在我的Xcode项目中解析TBXML。但是我被困在一种我不太了解的XML结构上。

这是XML结构:

代码语言:javascript
复制
    <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结构的帮助。我的代码看起来像这样:

代码语言:javascript
复制
        TBXMLElement *elementName = [TBXML childElementNamed:@"Currency" parentElement:element];
        TBXMLElement *altinTemp = [TBXML childElementNamed:@"CurrencyName" parentElement:elementName];

这是我获取XML的CurrencyName的方法,但是我得到了一个错误。请参见代码:

代码语言:javascript
复制
    + (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 (code=2,address=0x10)”

任何回复都会对我有好处!谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-08-09 18:36:28

我相信你想要这样的东西

代码语言:javascript
复制
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;
        } 
    }
}

的替代方案

代码语言:javascript
复制
childElementNamed: parentElement:

代码语言:javascript
复制
childElementNamed: parentElement: error:

它允许您处理任何一个nil节点(我假设您有)。错误:也可以添加到大多数TBXML类函数中似乎,它会降低性能,所以最好只在调试时使用它,或者在节点/值可能存在或不存在的时候使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11703749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档