2014-10-27 51 views
0

我有這樣的NSXMLParser訪問字符串值誤差

<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.6.0_27" class="java.beans.XMLDecoder"> 
<object class="java.util.ArrayList"> 
    <void method="add"> 
    <object class="impl.DictSpotIndexImpl"> 
    <void property="englishMeaning"> 
    <string></string> 
    </void> 
    <void property="englishWordName"> 
    <string> dendritical</string> 
    </void> 
    <void property="tamilMeaning"> 
    <string>Empty</string> 
    </void> 
    <void property="tamilWordName"> 
    <string>மரம் போன்ற வரைததடங்களையுடைய படி அடுக்கியற் பாறை</string> 
    </void> 
    <void property="wordClass"> 
    <string>regular</string> 
    </void> 
    <void property="wordConstraints"> 
    <string></string> 
    </void> 
    <void property="wordDataSource"> 
    <string>Source Not found</string> 
    </void> 
    <void property="wordImages"> 
    <string></string> 
    </void> 
    <void property="wordPopularity"> 
    <string></string> 
    </void> 
    <void property="wordTypes"> 
    <string>பெயரடை</string> 
    </void> 
    </object> 
    </void> 
</object> 
</java> 

XML數據現在,我想這是屬性tamilWordName內的值。我怎樣才能做到這一點。? 任何建議將非常感激。

到目前爲止,我試過這樣,真的不知道如何處理屬性。

// 
// xmlParser.swift 
// Dictionary 
// 
// Created by Alvin Varghese on 27/Oct/14. 
// Copyright (c) 2014 Karky Research Foundation. All rights reserved. 
// 

import Cocoa 

class xmlParser: NSObject, NSXMLParserDelegate 
{ 

    var element : String? 

    func doParse(filePath : String) 
    { 
     var data : NSData = NSData(contentsOfFile: filePath)! 

     var xmlParser : NSXMLParser = NSXMLParser(data: data)! 
     xmlParser.delegate = self 
     var success : Bool = xmlParser.parse() 

     if success 
     { 
     } 

    } 


    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) 
    { 
     element = elementName 

     if elementName == "void.tamilWordName" 
     { 
      println(elementName) 
     } 


    } 

    func parser(parser: NSXMLParser, foundCharacters string: String) 
    { 

    } 


    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String, qualifiedName qName: String) 
    { 


    } 



    func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError) 
    { 

    } 





} 
+0

元素名稱在您的XML中始終爲'void',因此您必須檢查密鑰'tamilWordName'的屬性字典 – zisoft 2014-10-27 13:20:53

+0

@zisoft是的,我知道這一點。但在這種情況下,不知道檢查屬性名稱的正確方法。你知道嗎 。? – 2014-10-27 13:30:39

+0

發表了一段代碼作爲答案。 – zisoft 2014-10-27 13:52:48

回答

1

這是處理屬性的代碼片段。

如果元素名稱爲void,則必須檢查屬性。 如果存在名稱爲property的屬性,請檢查值是否爲tamilWordName。一旦你發現所有的層次,設置一個布爾標誌並等待下一個元素進入didStartElement。只要您在didEndElement中找到元素名稱void,就可以對其進行處理。

func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject : AnyObject]!) { 
    self.currentElement = elementName // helper variable to hold the current element 

    if elementName == "void" { 
     let attrs = attributeDict as [String: NSString] 

     if let prop = attrs["property"] { 
      if prop == "tamilWordName" { 
       // found it, now set a boolean property variable and process the elements coming 
       self.tamilWordName = true 
      } 
     } 
    } 
} 

func parser(parser: NSXMLParser!, foundCharacters string: String!) { 
    if currentElement == "string" && self.tamilWordName { 
     // append to variable which holds the string 
     self.tamilWordString += string 
    }   
} 

func parser(parser: NSXMLParser!, didEndElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!) { 
    if elementName == "string" && self.tamilWordName { 
     // string element inside tamilWordName closed, process it here 
    } 
    else if elementName == "void" && self.tamilWordName { 
     // void element with property tamilWordName closed 
     self.tamilWordName = false 
    }    
} 

我希望你在這裏得到的想法。

+0

讓我看看那個。 – 2014-10-27 14:23:23

+0

謝謝。這工作正常。 – 2014-10-28 06:10:54