14998


下記のようなXMLのデータをswiftでパースしたい。 NSXMLParserを使用するつもりです。
を配列に格納？しparse.comにデータを保存したいです。 どのようにコードを書けばいいでしょうか。

[code]

    result: '<?xml version="1.0" encoding="UTF-8"?>
    <rss xmlns:dcterms="http://purl.org/dc/terms/"xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dcndl="http://ndl.go.jp/dcndl/terms/" version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:dcmitype="http://purl.org/dc/dcmitype/">
    <channel>
    <title>9784088701141 - 国立国会図書館サーチ OpenSearch</title>
    <link>http://iss.ndl.go.jp/api/opensearch?isbn=9784088701141</link>
    <description>Search results for isbn=9784088701141 </description>
    <language>ja</language>
    <openSearch:totalResults>1</openSearch:totalResults>
    <openSearch:startIndex>1</openSearch:startIndex>
    <openSearch:itemsPerPage></openSearch:itemsPerPage>
    <item>
      <title>バクマン。</title>
      <link>http://iss.ndl.go.jp/books/R100000002-I000011011591-00</link>
    <description>
    <![CDATA[<p>10 (表現力と想像力),集英社,9784088701141</p>
    <ul><li>タイトル： バクマン。</li>
    <li>タイトル（読み）： バクマン</li>
    <li>責任表示： 大場つぐみ 原作,小畑健 漫画,</li>
    <li>シリーズ名： ジャンプ・コミックス</li>
    <li>シリーズ名（読み）： ジャンプ コミックス</li>
    <li>NDC(9)： 726.1</li>
    </ul>]]>
    </description>
      <author>大場つぐみ 原作,小畑健 漫画,</author>
      <category>本</category>
      <guid isPermaLink="true">http://iss.ndl.go.jp/books/R100000002-I000011011591-00</guid>
      <pubDate>Fri, 05 Nov 2010 09:00:00 +0900</pubDate>
      <dc:title>バクマン。</dc:title>
      <dcndl:titleTranscription>バクマン</dcndl:titleTranscription>
      <dc:creator>大場つぐみ 原作</dc:creator>
      <dc:creator>小畑健 漫画</dc:creator>
      <dcndl:volume>10 (表現力と想像力)</dcndl:volume>
      <dcndl:seriesTitle>ジャンプ・コミックス</dcndl:seriesTitle>
      <dcndl:seriesTitleTranscription>ジャンプ コミックス   </dcndl:seriesTitleTranscription>
      <dc:publisher>集英社</dc:publisher>
      <dcterms:issued xsi:type="dcterms:W3CDTF">2010</dcterms:issued>
      <dc:identifier xsi:type="dcndl:ISBN">9784088701141</dc:identifier>
      <dc:identifier xsi:type="dcndl:JPNO">21829876</dc:identifier>
      <dc:subject xsi:type="dcndl:NDLC">Y84</dc:subject>
      <dc:subject xsi:type="dcndl:NDC9">726.1</dc:subject>
      <rdfs:seeAlso rdf:resource="http://id.ndl.go.jp/bib/000011011591"/>
    　</item>
     </channel>
    </rss>
    
[/code]


CC BY-SA 3.0
2015-08-28T13:49:42.413
14969
2015-08-29T09:17:17.647
11113
question
ios swift xcode
下記のようなXMLのデータをswiftでパースしたい。 NSXMLParserを使用するつもりです。 <author> <dc:title> <dc:publisher>を配列に格納？しparse.comにデータを保存したいです。 どのようにコードを書けばいいでしょうか。


**一冊ごとのデータを入れた辞書** (anInfo)を **配列に溜めて**
(informations)それをParseのクラウドへセーブする。この解析ではitemタグでanInfoの内容を区切ってる

このコードはParseのセットアップができてりゃXMLがプロジェクトのバンドルに「test.xml」として存在すれば動く

[code]

    import UIKit
    import Parse
    
    class ViewController: UIViewController, NSXMLParserDelegate {
    
      var XMLParser: NSXMLParser?
      var XMLParserTargetElementName: String?
      var parseObject: PFObject?
      var informations: [AnyObject]?
      var anInfo: [String: String]?
    
      override func viewDidLoad() {
        super.viewDidLoad()
    
        self.parse()
      }
    
      func parse() {
        let url = NSBundle.mainBundle().URLForResource("test", withExtension: "xml")
        self.XMLParser = NSXMLParser(contentsOfURL: url)
        self.XMLParser?.delegate = self
        self.XMLParserTargetElementName = nil
    
        self.parseObject = PFObject(className: "BookInfo")
    
        var success = self.XMLParser?.parse()
        if (success == true) {
          self.parseObject!.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in
            println(self.parseObject!.objectId)
          }
        }
      }
    
      func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
        self.XMLParserTargetElementName = elementName
    
        if (elementName == "item") {
          self.informations = []
          self.anInfo = [String: String]()
        }
      }
    
      func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
        self.XMLParserTargetElementName = nil
    
        if (elementName == "item") {
          println(self.anInfo)
          self.informations?.append(self.anInfo!)
          self.parseObject!["item"] = self.informations
        }
      }
    
      func parser(parser: NSXMLParser, foundCharacters string: String?) {
        if (self.XMLParserTargetElementName == "author" ||
          self.XMLParserTargetElementName == "dc:title" ||
          self.XMLParserTargetElementName == "dc:publisher") {
            self.anInfo![self.XMLParserTargetElementName!] = string
        }
      }
    }
    
[/code]

クラウドのデータブラウザでこうなる

[![画像の説明をここに入力](https://i.stack.imgur.com/44poa.png)](https://i.stack.imgur.com/44poa.png)

PFObjectを使ってれば分かると思うが同じobjectIdを自分で指定しなければインスタンスを作ってセーブするたびに新規データ扱いでクラウドに追加されるから気をつけろよ


CC BY-SA 3.0
2015-08-29T09:17:17.647
14998
2015-08-29T09:17:17.647
14969
answer