黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 XML數據

XML數據

更新時間:2021-08-19 11:29:05 來源:動力節(jié)點 瀏覽948次

XML數據

XML(eXtensible Markup Language),是一種對字符串文件內容進行結構化標記的語言。

以根元素為基礎的樹狀數據結構。

用于數據傳輸,而非顯示。

自定義標簽。

自我描述。

HTML非常相似。

<!-- 我是注釋:XML示例 -->
<root> // 根元素
<subchild1 屬性1="屬性值1" 屬性2="屬性值2" 屬性3="屬性值3"> // 元素可以擁有若干屬性,以空格區(qū)分;放在開始標簽中
<subchild2 屬性1="屬性值1"/> // 如果只保留結束標簽,就將屬性放在結束標簽中
<subchild3>文本內容</subchild3> // 元素的文本內容放在首尾標簽之間
......
</subchild1>
</root>

構成

聲明,記錄了XML版本和編碼方式。

元素,即開始標簽和結束標簽之間的部分,是XML數據的基本單位。其可以包含:

其他元素,元素之間不能交叉嵌套。

文本,所有的空格和換行都會被作為文本內容處理。

屬性,提供關于元素的額外信息,屬性值必須加引號(單引號/雙引號)。

根元素:一個節(jié)點中只能有一個,它是所有子元素的父元素。

語法

有且只有一個根元素

屬性值必須加引號

必須正確嵌套

標簽對大小寫敏感

元素必須有一個關閉標簽

數據保存:屬性?元素?

屬性不能包含多個值,元素可以。

屬性不能包含樹結構,元素可以。

屬性不容易擴展(為未來的變化)。

XML解析

SAX:從根元素開始,按照數據結構順序解析(從下至上,從外向內),適合大文件。

DOM:一次性將整個XML加載進內存進行解析,適合比較小的文件。

NSXMLParser / SAX解析

屬性數據:

/**
開始解析一個XML文件時調用
*/
- (void)parserDidStartDocument:(NSXMLParser *)parser;
/**
開始解析某個元素時調用
*/
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
   NSLog(@"開始解析元素:%@--->屬性字典:%@", elementName, attributeDict);   
   /*
    如果用屬性保存數據,則可以在這個代理方法中利用屬性字典/attributeDict,獲取所需的數據
    */
   if ([elementName isEqualToString:@"vedio"]) {
       RAPVideoModel *model = [RAPVideoModel videoModelWithDictonary:attributeDict];
       [self.dataArray addObject:model];
   }
}
/**
某個元素含有文本內容時調用
*/
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
/**
解析某個元素完畢時調用
*/
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
/**
解析一個XML文件結束時調用
*/
- (void)parserDidEndDocument:(NSXMLParser *)parser;

元素數據

/**
開始解析某個元素時調用
*/
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
   /*
    找到目標元素,在開始解析時,創(chuàng)建模型,做好數據接收的準備。
    */
   if ([elementName isEqualToString:@"vedio"]) {
       self.videoModel = [RAPVideoModel new];
   }
}
/**
某個元素含有文本內容時調用
*/
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
   NSLog(@"發(fā)現元素文本內容:%@", string);
   /*
    記錄元素的文本內容。
    elementValueString是一個可辨字符串
    */
   [self.elementValueString setString:string];
}
/**
解析某個元素完畢時調用
*/
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{  
   /*
    通過判斷元素名,來確定元素是否攜帶了所需的數據(內容),將其內容加入到模型。
    videoModel代表目標元素所對應的模型對象
    */
   if ([elementName isEqualToString:@"ID"]) {
       [self.videoModel setValue:self.elementValueString forKey:elementName];
   }
   if ([elementName isEqualToString:@"length"]) {
       [self.videoModel setValue:self.elementValueString forKey:elementName];
   }
   if ([elementName isEqualToString:@"name"]) {
       [self.videoModel setValue:self.elementValueString forKey:elementName];
   }
   if ([elementName isEqualToString:@"url"]) {
       [self.videoModel setValue:self.elementValueString forKey:elementName];
   }
   if ([elementName isEqualToString:@"image"]) {
       [self.videoModel setValue:self.elementValueString forKey:elementName];
   }
   if ([elementName isEqualToString:@"vedio"]) {
       [self.dataArray addObject:self.videoModel];
   }
}

GDataXML/DOM解析

GDataXMLDocument,代表一個XML文件。

GDataXMLElement,代表一個XML元素。

GDataXMLNode,根據 DOM,XML 文檔中的每個成分都是一個節(jié)點。

屬性數據

    NSURLSession *session = [NSURLSession sharedSession];
    [[session dataTaskWithURL:[NSURL URLWithString:@"http://localhost/resources/vedios.xml"]completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        /*
         通過元素屬性保存數據時
         */
        // 加載XML文件
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:NULL];
        // 找出XML文件的根元素
        GDataXMLElement *rootElement = doc.rootElement;
        // 遍歷根元素,以獲取其子元素
        [rootElement.children enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {            
            GDataXMLElement *subElement = obj;
            RAPVideoModel *model = [RAPVideoModel new];            
            // 遍歷一個子元素的屬性數組
            [subElement.attributes enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                GDataXMLNode *attr = obj;
                // sringValue為屬性值,name為屬性名
                [model setValue:attr.stringValue forKey:attr.name];
            }];            
            [self.dataArray addObject:model];
        }];        
    }] resume];

元素數據

    NSURLSession *session = [NSURLSession sharedSession];
    [[session dataTaskWithURL:[NSURL URLWithString:@"http://localhost/resources/vedios2.xml"]completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        /*
         通過XML元素保存數據時
         */        
        // 加載XML文件
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:NULL];
        // 找出XML文件的根元素
        GDataXMLElement *rootElement = doc.rootElement;
        // 遍歷根元素,以獲取其子元素
        [rootElement.children enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {            
            GDataXMLElement *subElement = obj;
            RAPVideoModel *model = [RAPVideoModel new];            
            // 遍歷子元素的子元素數組
            [subElement.children enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {               
                GDataXMLElement *subSubElement = obj;
                // sringValue為元素文本內容,name為元素名
                [model setValue:subSubElement.stringValue forKey:subSubElement.name];
            }];            
            [self.dataArray addObject:model];
        }];        
    }] resume];

以上就是動力節(jié)點小編介紹的"XML數據",希望對大家有幫助,想了解更多可查看Java在線學習。動力節(jié)點在線學習教程,針對沒有任何Java基礎的讀者學習,讓你從入門到精通,主要介紹了一些Java基礎的核心知識,讓同學們更好更方便的學習和了解Java編程,感興趣的同學可以關注一下。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产一级久久免费特黄 | 波多野野结衣1区二区 | 中文字幕日韩一区 | 亚洲午夜精品在线 | 一级片黄色免费 | 精品 日韩 国产 欧美在线观看 | 综合久青草视频 | 久久成人免费观看全部免费 | 天天澡天天摸天天添视频 | 国内精品视频在线观看 | 一级性黄色 | 日本xxxxx黄区免费看动漫 | 欧美成人黄色 | 欧美久久xxxxxx影院 | 91久久澡人人爽人人添 | 精品视频免费在线 | 亚洲另类z0zx | 亚洲最黄网站 | 欧美性高清另类videosex | 人人艹人人干 | 高清一级毛片一本到免费观看 | 91精品视频在线观看免费 | 99ri在线 | 巨胸喷奶水www久久久免费观看 | 女厕所vedioxxxx | 亚洲欧美日韩国产精品网 | 国产视频大全 | 欧美一区二区三区免费不卡 | 97色噜噜刺激有声小说 | 亚洲一二区视频 | 日本午色www高清视频 | 日本中文视频 | 日韩欧美高清在线观看 | 色亚洲影院 | 成人欲涩漫h漫免费动漫 | 亚洲黄网在线播放高清 | 日本高清h色视频在线观看 日本妇人成熟免费观看18 | 日韩a一级欧美一级 | 欧美日本成人 | 黄色网址视频在线播放 | 日韩在线天堂免费观看 |