- ベストアンサー
javascriptにてXMLの読み込み
yahooの日本語係り受け解析を使って解析を行おうと思っています。 <ResultSet xsi:schemaLocation="urn:yahoo:jp:jlp:DAServicehttp://jlp.yahooapis.jp/DAService/V1/parseResponse.xsd"> -<Result> -<ChunkList> -<Chunk> <Id>0</Id> <Dependency>1</Dependency> -<MorphemList> -<Morphem> <Surface>こんな</Surface> <Reading>こんな</Reading> <Baseform>こんな</Baseform> <POS>形容動詞</POS> <Feature>形容動詞,形動特殊,*,こんな,こんな,こんな</Feature> </Morphem> </MorphemList> </Chunk> -<Chunk> <Id>1</Id> <Dependency>2</Dependency> -<MorphemList> -<Morphem> <Surface>私</Surface> <Reading>わたし</Reading> ・ ・ ・ リクエストを送るとこのような形で返ってくるのですが、IdとDependencyの値は取れるのにSurfaceの値が取れません。 JKL.ParseXMLを使っています。 処理部分↓ var http = new JKL.ParseXML("http://jlp.yahooapis.jp/… //リクエスト&オブジェクト var data = http.parse(); //解析 var kai = data["ResultSet"]["Result"]["ChunkList"]["Chunk"]; //この後 kai["Id"]で値は取れます。 var kai2 = data["ResultSet"]["Result"]["ChunkList"]["Chunk"]["MorphemList"]["Morphem"]; //ここでエラーが出ます。 MorphemがNullまたはオブジェクトではないと表示されるんですが… ブラウザはIEです。 どなたかご教授お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
JKL.ParseXMLをよく使っている者です。 下のように、<Morphem>が一つの時と、複数の時をハンドリング する必要があるのでは? if ((typeof data.ResultSet.Result.ChunkList.Chunk.MorphemList.Morphem[0]) == "object"){ for(i=0;i<data.ResultSet.Result.ChunkList.Chunk.MorphemList.Morphem.length;i++){ Morphem[i] = data.ResultSet.Result.ChunkList.Chunk.MorphemList.Morphem[i] } }else{ Morphem[0] = data.ResultSet.Result.ChunkList.Chunk.MorphemList.Morphem; } for(i=0;i<Morphem.length;i++){ Surface[i] = Morphem[i].Surface; Reading[i] = Morphem[i].Reading; } あるいは、JKL.ParseXMLのサブクラス http.setOutputArrayElements( "TAG" ) http.setOutputArrayNever() を使ってみては、いかがです。
その他の回答 (2)
- himajin100000
- ベストアンサー率54% (1660/3060)
んー手元では再現できない... このライブラリ殆ど使ったことないし。 自分の環境(Minefield/Firefox 3.2a1pre)だと 次のような挙動をしているように思う(readmeとか読んでません) 1.インデクサによって要素名を指定する要素が一つしかない時, 数字を指定することは出来ない。 <a> <b></b> <!-- data["a"]["b"]はObject。data["a"][0]["b"]はundefined --> </a> 2.要素が二つ以上あるときは数字でノードを特定しないといけない。XPathのように複数のノードがマッチする、というようなことはないようだ。 <a> <!-- data["a"]["b"]["c"]やdata["a"]["b"]["c"][0]はundefined。data["a"]["b"][0]["c"]は"あ" --> <b><c>あ</c></b> <b><c>い</c></b> </a> お互い違うXMLデータで話していると思うので この挙動が一致しているかどうか返答もらってもいいかな?
- himajin100000
- ベストアンサー率54% (1660/3060)
http://developer.yahoo.co.jp/webapi/jlp/da/v1/parse.html 良く見ると Morphem【e】List になってない? #未検証だけど
お礼
まさかと思ってやってみましたがやっぱりだめでした。 リクエストページではちゃんと MorphemList になっているので おそらく記述ミスかと。