加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Objective C iPhone的XMLStreamReader?

发布时间:2020-12-16 06:55:29 所属栏目:百科 来源:网络整理
导读:我使用 XMLWriter生成xml.现在我想用一些Reader库/框架阅读这个xml.是否有任何补充框架/库可用于此. 我目前正在寻找使用TouchXML库来阅读它,但它不能以预期的方式工作,因为它不支持流读取. 我想做点什么: XmlReader pReader = XmlTextReader.Create(pPath);
我使用 XMLWriter生成xml.现在我想用一些Reader库/框架阅读这个xml.是否有任何补充框架/库可用于此.

我目前正在寻找使用TouchXML库来阅读它,但它不能以预期的方式工作,因为它不支持流读取.

我想做点什么:

XmlReader pReader = XmlTextReader.Create(pPath);

    while (pReader.Read()){

        switch (pReader.LocalName){
            case EXPEL_DEVICES:
            {
                //if ((pImportFlags & (int)ExportClass.Devices) != 0)
                //{
                for (pReader.ReadToFollowing(LOCAL_NAME,NAMESPACE_EXPORT);
                     !pReader.EOF && pReader.LocalName == @"NAME"; )
                {
                    if (!pReader.ReadToFollowing(DEVICE_ID,NAMESPACE_EXPORT))
                        throw new AException(DEVICE_ID);
                    NSString *value = pReader.ReadElementContentAsString();
                }
            }
                break;
        }
    }

解决方法

在失去我自己的声望值50后,我终于使用了libxml2并将我的XMLStreamReader类作为以下内容,我希望我之前能够找到它:P.请注意,为了使用它,我们需要在我们的框架中包含libxml2.dylib,并在构建设置中将-lxml2添加到其他链接器标志中并在标头搜索路径中添加/usr/include / libxml2

头文件:

#import <Foundation/Foundation.h>
#import <libxml/xmlreader.h>

@interface XMLStreamReader : NSObject {
    xmlTextReaderPtr xmlReader;
}

@property (nonatomic,readonly,assign) BOOL eof;
@property (nonatomic,retain) NSString *localName;
@property (nonatomic,assign) xmlElementType nodeType;
@property (nonatomic,assign) BOOL read;
@property (nonatomic,assign) BOOL readElementContentAsBoolean;
@property (nonatomic,retain) NSString *readElementContentAsString;

- (void) close;
- (id) getAttribute:(NSString *) paramName;
- (id) initWithPath:(NSString *) path;
@end

实施文件:

#import "XMLStreamReader.h"

@implementation XMLStreamReader

@dynamic eof;
@dynamic localName;
@dynamic nodeType;
@dynamic read;
@dynamic readElementContentAsBoolean;
@dynamic readElementContentAsString;

- (void) dealloc{
    xmlFreeTextReader(xmlReader);
    [super dealloc];
}

/**
 * xmlTextReaderClose:
 * @reader:  the xmlTextReaderPtr used
 *
 * This method releases any resources allocated by the current instance
 * changes the state to Closed and close any underlying input.
 *
 * Returns 0 or -1 in case of error
 */
- (void) close{
    xmlTextReaderClose(xmlReader);
}

/**
 * @reader:  the xmlTextReaderPtr used
 * @name: the qualified name of the attribute.
 *
 * Provides the value of the attribute with the specified qualified name.
 *
 * Returns a string containing the value of the specified attribute,or NULL
 *    in case of error. The string must be deallocated by the caller.
 */
- (id) getAttribute:(NSString *) paramName{
    xmlChar *attribute = xmlTextReaderGetAttribute(xmlReader,(xmlChar *)[paramName UTF8String]);

    if(attribute != NULL){
        NSString *rtString = [NSString stringWithUTF8String:(const char *)attribute];
        free(attribute);
        return rtString;
    }
    return NULL;
}

/**
 * Checks if,the reader has reached to the end of file
 * 'EOF' is not used as it is already defined in stdio.h
 * as '#define  EOF (-1)'
 */
- (BOOL) eof{
    return xmlTextReaderReadState(xmlReader) == XML_TEXTREADER_MODE_EOF;
}

/**
 * Initializing the xml stream reader with some uri
 * or local path.
 */
- (id) initWithPath:(NSString *) path{
    if(self = [super init]){
        xmlReader = xmlNewTextReaderFilename([path UTF8String]);
        if(xmlReader == NULL)
            return nil;
    }
    return self;
}

/**
 * @reader:  the xmlTextReaderPtr used
 *
 * The local name of the node.
 *
 * Returns the local name or NULL if not available,*   if non NULL it need to be freed by the caller.
 */
- (NSString *) localName{
    xmlChar *lclName = xmlTextReaderLocalName(xmlReader);

    if(lclName != NULL){
        NSString *rtString = [NSString stringWithUTF8String:(const char *)lclName];
        free(lclName);
        return rtString;
    }
    return NULL;
}

- (xmlElementType) nodeType{
    return xmlTextReaderNodeType(xmlReader);
}

/**
 * @reader:  the xmlTextReaderPtr used
 *
 *  Moves the position of the current instance to the next node in
 *  the stream,exposing its properties.
 *
 *  Returns 1 if the node was read successfully,0 if there is no more
 *          nodes to read,or -1 in case of error
 */
- (BOOL) read{
    return xmlTextReaderRead(xmlReader);
}

/**
 * @reader:  the xmlTextReaderPtr used
 *
 * Reads the contents of an element or a text node as a Boolean.
 *
 * Returns a string containing the contents of the Element or Text node,*         or NULL if the reader is positioned on any other type of node.
 *         The string must be deallocated by the caller.
 */
- (void) readElementContentAsBoolean{
    return [[self readElementContentAsString] boolValue];
}

/**
 * @reader:  the xmlTextReaderPtr used
 *
 * Reads the contents of an element or a text node as a string.
 *
 * Returns a string containing the contents of the Element or Text node,*         or NULL if the reader is positioned on any other type of node.
 *         The string must be deallocated by the caller.
 */
- (NSString *) readElementContentAsString{
    xmlChar *content = xmlTextReaderReadString(xmlReader);

    if(content != NULL){
        NSString *rtString = [NSString stringWithUTF8String:(const char *)content];
        free(content);
        return rtString;
    }
    return NULL;
}

/**
 * @reader:  the xmlTextReaderPtr used
 * @localName:  the local name of the attribute.
 * @namespaceURI:  the namespace URI of the attribute.
 *
 * Moves the position of the current instance to the attribute with the
 * specified local name and namespace URI.
 *
 * Returns 1 in case of success,-1 in case of error,0 if not found
 */
- (int) readToFollowing:(NSString *) localname namespace:(NSString *) namespaceURI{
    return xmlTextReaderMoveToAttributeNs(xmlReader,(xmlChar *)[localname UTF8String],(xmlChar *)[namespaceURI UTF8String]);
}

@end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读