大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

XML數據

更新時間:2021-08-19 11:29:05 來源:動力節點 瀏覽891次

XML數據

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

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

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

自定義標簽。

自我描述。

HTML非常相似。

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

構成

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

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

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

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

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

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

語法

有且只有一個根元素

屬性值必須加引號

必須正確嵌套

標簽對大小寫敏感

元素必須有一個關閉標簽

數據保存:屬性?元素?

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

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

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

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
{
   /*
    找到目標元素,在開始解析時,創建模型,做好數據接收的準備。
    */
   if ([elementName isEqualToString:@"vedio"]) {
       self.videoModel = [RAPVideoModel new];
   }
}
/**
某個元素含有文本內容時調用
*/
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
   NSLog(@"發現元素文本內容:%@", 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 文檔中的每個成分都是一個節點。

屬性數據

    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];

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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 狠狠躁天天躁夜夜躁婷婷 | 久久亚洲精品成人综合 | 毛片女女女女女女女女女 | 国产精品爱久久久久久久 | 日日爽天天干 | a拍拍男女免费看全片 | 亚洲精品一区二区久久这里 | 99久久精品国产交换 | 伊在人亚洲香蕉精品播放 | 天天操天天干视频 | 日韩经典欧美精品一区 | 日日爱影院 | 啪啪毛片 | 久久精品免看国产 | 国产一区二区在线免费观看 | 真实国产精品视频国产网 | 狠狠色噜噜狠狠狠狠97影音先锋 | 亚洲成人免费 | 毛片8| 亚洲图片综合网 | 97成人免费视频 | 天天都色 | 欧美高清一区二区三区欧美 | 精品资源在线 | 日本欧美成| 成人在线视频免费 | 欧美一级艳片视频免费观看 | 亚洲精品一区国产二区 | 国产三级做爰在线播放最爱 | 成人永久福利在线观看不卡 | 97最新| 久久这里只有精品6 | 成人欧美视频免费看黄黄 | 老司机性视频 | 亚洲性夜夜综合久久麻豆 | 伊人丁香狠狠色综合久久 | 中文字幕一区二区三区精品 | 欧美第一区 | 四虎精品影院 | 国产精品视_精品国产免费 国产精品视频2021 | 久青草视频在线 |