大战熟女丰满人妻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編程,感興趣的同學可以關注一下。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 四虎伊人 | 亚洲精品一区二区三区四区 | 久久99精品国产免费观看 | 日本不卡在线一区二区三区视频 | 久久久窝窝午夜精品 | 99久久亚洲 | 国产精品福利久久2020 | 天天操比| 国产综合社区 | 奇米影视9999 | 一级毛片一级毛片免费毛片 | 99热视屏| 免费看色片网站 | 欧美亚洲天堂 | 国产女人综合久久精品视 | 亚洲另类中文字幕 | 久久这里只有精品99 | 国产边打电话边被躁视频 | 国产精品怡红院永久免费 | 成人免费国产欧美日韩你懂的 | 日日噜噜噜夜夜爽爽狠狠图片 | 国产福利视频一区二区微拍 | 国产香蕉98碰碰久久人人 | 国产精品视频免费看 | 国产我不卡 | 久久99热这里只有精品7 | 毛片免费观看网址 | 婷婷综合色伊人阁 | 日韩一区二区三区在线视频 | 成人国产一区二区 | 天天综合欧美 | 精品国产影院 | 免费看一级毛片 | 奇米影视一区 | 亚洲精品久荜中文字幕 | 九九精品成人免费国产片 | 一区免费 | 深夜视频在线免费 | 免费观看呢日本天堂视频 | 99热最新在线| 免费深夜视频 |