• ベストアンサー

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です。 どなたかご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.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)

回答No.2

んー手元では再現できない... このライブラリ殆ど使ったことないし。 自分の環境(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データで話していると思うので この挙動が一致しているかどうか返答もらってもいいかな?

回答No.1

http://developer.yahoo.co.jp/webapi/jlp/da/v1/parse.html 良く見ると Morphem【e】List になってない? #未検証だけど

navigater5
質問者

お礼

まさかと思ってやってみましたがやっぱりだめでした。 リクエストページではちゃんと MorphemList になっているので おそらく記述ミスかと。

関連するQ&A

専門家に質問してみよう