No.3ベストアンサー
- 回答日時:
回答No.2への補足に対して:
> func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: NSDictionary!)
これは誤りがあるというか、情報が古いというか……現時点でのこのDelegateメソッドの書式は
func parser(_ parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI namespaceURI: String!, qualifiedName qualifiedName: String!, attributes attributeDict: [NSObject : AnyObject]!)
こうなっています。引数「attributeDict」の型は、NSDictionaryではなく、SwiftのDictionaryです。Xcodeが最新バージョンでなければ、アップデートしてください。
> 参考本を購入しネット上でも色々探しているのですが、方法が見当たりません。
まず、Xcodeのヘルプの使い方を覚えることです。Xcodeのエディタ上で、調べたい語句、ないし手がかりになる語句(この場合は、「NSXMLParser」や、メソッド名)の上に、Optionキー(DOS-V機系キーボードならAltキー)を押しながらマウスカーソルを置くと、マウスポインタが「?」に変わります。クリックするとミニリファレンスが開きます。ミニリファレンスの中のいちばん下、(この場合では)NSXMLParser (Delegate Protocol) Class Referenceをクリックすると、ヘルプウインドウにフルリファレンスが表示されます。
フルリファレンス中の「More related items...」をクリックすると、さらに関連情報を探すことができます。
(ただし、クラスリファレンスはSwift対応ずみですが、各ガイドは、Objective-Cのみの情報です)
Xcodeのヘルプにある情報は、すべてネット上で公開されています。Googleで検索したら、Apple Develop提供の情報は、だいたいトップ5には入ってますよ。
NSXMLParserDelegate
https://developer.apple.com/library/ios/document …
さて、話を絞り込みましょう。
func parser(_ parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI namespaceURI: String!, qualifiedName qualifiedName: String!, attributes attributeDict: [NSObject : AnyObject]!)
引数「elementName」は、開始タグのエレメント名(タグ名)を指します。この場合は「li」です。
namespaceURIとqualifiedNameは、HTMLレベルでは使いません。というか、私も知りません。
ここで重要なのは、「attributeDict」です。タグの属性が、辞書形式で格納されます。Swiftの辞書(Dictionary)は、ほかの言語ではハッシュテーブルとか連想配列などと呼ばれています。要素にラベル(キー値)が付いている配列クラスのことです。たとえば……
<img src="http://www.apple.com/picture.jpg" width="400" height="300"/>
こういうタグに対して……
let imageSource = attributeDict["src"] as String // "http://www.apple.com/picture.jpg"
let imageWidth = attributeDict["width"] as String // "400"
let imageHeight = attributeDict["height"] as String // "300"
このようなタグの属性の取得ができます。
ここまでの内容を反映させた、回答No.2に掲示のサンプルコードの続きをのせます。
func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject : AnyObject]!) {
if elementName == "li" {
if (attributeDict["class"] as String?) == "AAAA" {
contentString = ""
start = true
}
}
}
この回答への補足
詳細に記載いただきありがとうございました。
今後、Xcodeのヘルプを参考にしたいと思います。
記載いただいたサンプルですが、例えばディズニーランドのサイト(http://s.tokyodisneyresort.jp/tdl/atrc_list.htm)で
下記のタグから<li class="fp">のファストパス®・チケット 発券中を取得したいといった場合ですが
サンプルを使用するとelementnameには先頭から</head>の前のtitleまでしか取得できていないようです。
何か方法はありますでしょうか?
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1 ,minimum-scale=1, maximum-scale=1, user-scalable=no">
<meta name="format-detection" content="telephone=no" />
<link rel="apple-touch-icon" href="/images/common/apple-touch-icon.png">
<link rel="stylesheet" href="/css/common/reset.css" />
<link rel="stylesheet" href="/css/common/parts.css" />
<link rel="stylesheet" href="/css/common/layout.css" />
<link rel="stylesheet" href="/css/common/indivi.css" />
<link rel="stylesheet" href="/css/tdl/layout.css" />
<link rel="stylesheet" href="/css/tdl/indivi.css" />
<script type="text/javascript" src="/js/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="/js/common.js"></script>
<title>【公式】アトラクション待ち時間 | 東京ディズニーランド</title> //ここまでしか取得できない
</head>
<body>
~中略~
<ul class="tab tdl clearfix">
<li class="tdl"><img src="/images/tdl/tabTDL.png" width="150" height="40" alt="Tokyo Disney Land" /></li>
<li class="tds"><a href="/tds/atrc_list.htm"><img src="/images/tds/tabTDS-off.png" width="150" height="40" alt="Tokyo Disney Sea" /></a></li>
</ul>
<aside class="fp">
<ul>
<li class="fp">ファストパス®・チケット 発券中</li>
<li class="fp-no">ファストパス®・チケット 発券中止</li>
<li>アイコンなし:ファストパス®・チケット 未対応</li>
</ul>
</aside>
</div>
<li class="fp">ファストパス®・チケット 発券中</li>
No.2
- 回答日時:
あなたの2015/01/03の質問のときに、真摯に回答すべく、サンプルプログラムを作って、用意しています。
下記はその抜粋です。import UIKit
class ViewController: UIViewController, NSXMLParserDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let sampleURL = NSBundle.mainBundle().URLForResource("sample", withExtension: "html")
let parser = NSXMLParser(contentsOfURL: sampleURL!)
parser?.delegate = self
if parser?.parse() != nil {
println("Parse was success")
} else {
println("Parse was failed")
}
}
// XML Parser Delegate
var contentString: String = ""
var start = false
func parserDidStartDocument(parser: NSXMLParser!) {
contentString = ""
start = false
}
意固地にならず、あなたがなにができて、どこから先ができないのか、なにを習得して、なにが未習得なのか……まあ、たしかにそういう説明がちゃんとできるのなら、質問するまでもなくじぶんで学習できるんでしょうが、つたないながらも、言葉を尽くして、説明しようとする姿勢は、回答者に理解してもらえると思いますよ。いかが?
この回答への補足
ご回答ありがとうございます。
言葉足らずで申し訳ございません。
>意固地にならず、あなたがなにができて、どこから先ができないのか、なにを習得して、なにが未習得なのか
.netのSEをしておりますが、SWIFTは今回初めて扱っております。参考本を購入しネット上でも色々探しているのですが、方法が見当たりません。
記載いただいたようにparseはできております。その後、下記の関数で中身のデータを操作できるようなのですが、ああああああの箇所を取得しようとしても引数のelementNameにはliのみが取得されてしまいます。属性(attributeDict)なども使用してみましたがうまく出来ません。
ご教示ください。
var currentElementName : String!
let itemElementName = "AAA"
func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: NSDictionary!)
{
currentElementName = nil
println(attributeDict)
println(qName)
if elementName == itemElementName {
items.append(Item())
} else {
currentElementName = elementName
}
}
No.1
- 回答日時:
> ※内容が理解できる方のみご回答をお願いいたします。
ですから、あなたの説明では、だれひとりとして「内容が理解でき」ないよ、ということを、くりかえし申し上げているのですが?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ulタグやliタグの中でbrタグ...
-
htmlの<ol>タグで、数字などを...
-
画像にリンクを張ると画像がず...
-
Tableの1セル内に画像・テキス...
-
<ol><li> 左側にスペースがで...
-
【CSS】メニュー上部に固定させ...
-
番号付きリスト(<Ol><Li>・・...
-
liタグの中に<p>タグやら<dl>を...
-
画像を形そのままで横に並べたい
-
リンク文字同士の間隔を開ける...
-
クリッカブルマップ(イメージマ...
-
Dreamweaverで、ul要素の下に写...
-
HTMLで組織図を作成する方法
-
<ul>~</ul>が二つ続くと間に改...
-
SWIFTでHtmlのソースの一部を取得
-
<li>で改行する横並びのメニュー
-
リストマーカーをボックス内に...
-
divタグ内のコンテンツが重なっ...
-
HTML5のfooterに見出しを付けて...
-
<ul><li></li></ul>にするメリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
リストマーカーをボックス内に...
-
liタグの中に<p>タグやら<dl>を...
-
<table>の高さ固定。情報増加時...
-
レスポンシブWebデザインでリン...
-
html/cssの、navを2段にする...
-
リストの数字のフォントサイズ...
-
divタグ内のコンテンツが重なっ...
-
<ul><li></li></ul>にするメリ...
-
HTMLで組織図を作成する方法
-
ulタグやliタグの中でbrタグ...
-
リンク文字同士の間隔を開ける...
-
<ul>~</ul>が二つ続くと間に改...
-
ulとliで囲った文字の一部を変...
-
番号付きリスト(<Ol><Li>・・...
-
display:table;を多段表示させたい
-
ボタンを横に並べて表示させる方法
-
html <li>の中の文字一部に色を...
-
CSS質問:大手サイトを見ると何...
-
html <ul></ul>の並びで一行空...
-
Tableの1セル内に画像・テキス...
おすすめ情報