XMLでIDを取得して内容を反映する方法

このQ&Aのポイント
  • アクションスクリプトを使用してXMLファイルを読み込み、ノードのIDを取得し、そのIDが含まれるノードの内容を反映させる方法について教えてください。
  • nextSiblingを使用してノードを上から順番に取得することはできますが、特定のIDを取得してその内容を反映させる方法について詳しく説明してください。
  • もしくは、特定のIDではなく、<menu>の属性を取得して内容を反映させる方法が簡単ならば、XMLの変更も可能な状態ですので、その方法についても教えてください。
回答を見る
  • ベストアンサー

XMLでノード内にあるIDを取得してそのIDが含まれるノード内の内容を

XMLでノード内にあるIDを取得してそのIDが含まれるノード内の内容を反映させる にはどうしたらいいでしょうか? XMLは以下のような感じです。 <?xml version="1.0" encoding="UTF-8"?> <top> <menu> <pid>1</pid> //これをIDとして <test>テスト</test> <test2>msn</test2> </menu> <menu> <pid>2</pid> <test>テストにしたのに…</test> <test2>教えてごお</test2> </menu> <menu> <pid>3</pid> <test>テスト</test> <test2>yahoo</test2> </menu> </top> 私はアクションスクリプトでxmlを読み込んでfirstChild やnextSiblingが使える程度のレベルです。 nextSiblingで上から順番にノードを取得していくことはできますが、 ”あるIDを取得してそのIDがある内容(<test>,<test2>)を反映させる” というところでつまずいています。 最悪はIDを取得しなくても ”?番目の<menu>を取得する” という取得の仕方でもいいです。 (<pid>と?番目は同じなので) あるいは ”<menu id="1">の属性を取得して反映させる” という方法の方が簡単ならばXMLの変更も可能な状態です。

  • Flash
  • 回答数2
  • ありがとう数6

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

  • ベストアンサー
  • 0909union
  • ベストアンサー率39% (325/818)
回答No.1

このような質問してくる人は、言語の勉強の仕方をしらないか、経験が浅いのでしょう。 オブジェクト指向のスクリプト言語なので、 オブジェクト が分かれば、そこに付随するメソッドとプロパティがありますね。 つまり、リファレンスを見ればいいわけです。このリファレンスを見て、やり方を習得してゆく方法になれれると、どんな言語でも簡単に使えるようになります。 まず、そのリファレンスサイト又は本を探してください。 ”ActionScript リファレンス” で探せますね。下記が例です。 http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/package-summary.html http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/ 下記にXMLのパッケージがあるかと。 http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/xml/XMLNode.html ここに見慣れた物があるはずです。XML Node, XML Document オブジェクト相当に当たる物ですね。取得した物が、どのようなオブジェクトなのか理解すれば、そのリファレンスのリンクをたどれば、「メソッドとプロパティ」が見れ、サンプルもありますね。 そのように見ると、自然とオブジェクトのツリー構造がわかるはずです。ツリー構造を理解してください。 XMLノードの検索は2つ。XpathとSearchですね。これに相当する物は、何か? バージョンにより見るリファレンスが違うようです。バージョンを記載しましょう。 http://livedocs.adobe.com/flash/9.0_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000125.html http://livedocs.adobe.com/flash/9.0_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000125.html にヒントがあります。階層としてノードにアクセスするのが最も簡単ですね。 と言う事でXMLを勉強していれば、簡単にわかります。暑さ300ページくらいの本で1ヶ月もあれば習得できます。Xpathとして、勉強してれいば、2、3分で分かった事です。

q0190dg
質問者

お礼

ありがとうございました。 しかし childNode[n]; で解決しました。 リファレンスは情報が多いかもしれませんが、見づらいです。adobeに言ってみます。

その他の回答 (1)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.2

最後のリンクが重複していたようで間違っていました http://livedocs.adobe.com/flash/9.0_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000129.html#wp308634 フィルタリングするやり方もありますね。

関連するQ&A

  • xmlから取得したurlをflash内で設定

    flash内に設置した複数のボタンに外部xmlから取得したurlを設定したいです。 検索したり過去の質問も見てましたが、いまいちわかりませんでしたのでご教授頂けたらと思います。 現在は↓のようになっています。 これですと1つしか読み込めないので、複数設定してそれぞれのリンクを設定したいと思っています。 わかる方いらっしゃいましたら何卒よろしくお願い致します。 xmlのソース(url.xml) <?xml version="1.0" encoding="UTF-8"?> <top> <menu> <title>url</title> <url>http://www.google.co.jp/</url> </menu> </top> FLASH内のスクリプト(フレーム) function startIndexMenu(success) { if (success == true) { rootNode = index_xml.firstChild; firstMenuNode = rootNode.firstChild; childMenuNode = firstMenuNode.firstChild; updateMenu(childMenuNode); } // end if } // End of the function function updateMenu(newMenuNode) { slideText = newMenuNode.firstChild.nodeValue; slideText_op = newMenuNode.nextSibling; urlNode = slideText_op.firstChild.nodeValue; nextMenuNode2 = firstMenuNode.nextSibling; slideText2 = nextMenuNode2.firstChild.nodeValue; nextMenuNode3 = nextMenuNode2.nextSibling; slideText3 = nextMenuNode3.firstChild.nodeValue; } // End of the function index_xml = new XML(); index_xml.onLoad = startIndexMenu; index_xml.load("url.xml"); index_xml.ignoreWhite = true; ボタンに設定してるスクリプト on (release) { getURL(_root.urlNode, ""); }

    • ベストアンサー
    • Flash
  • xmlから取得したアドレスにリンクを貼りたい。

    xmlから取得したページアドレスをダイナミックテキストに表示、リンクを貼りたいのですがうまくいきません…。 htmlTextを使用してかなり強引に記述しましたがやっぱり不可能でした。(本来アドレスを指定するべきところにノードの参照を直接書いた) dataText.html=true; dataText.condenseWhite=false; dataText.htmlText = <a href='weather_xml.firstChild.childNodes[2].childNodes[1].firstChild.nodeValue'> weather_xml.firstChild.childNodes[2].childNodes[1].firstChild.nodeValue </a> やりたいことは 1・xmlから取得したアドレスをテキスト表示。 2・そのアドレスと同じアドレスのリンクをそのテキストに貼る。 です。 1だけであればtextで表示指定するだけなので出来たのですが 1と2を兼ね合おうとするとどうしてもうまくいきません。 htmlTextではできないのでしょうか? 変数などで解決できるのであればその方法を教えて頂きたいです。 flashのバージョンは8です。 初歩的な質問ですいません。よろしくお願いします。

    • ベストアンサー
    • Flash
  • PHP5 XML 既存属性ノードから属性を追加する方法

    お世話になっています。 現在PHP5を勉強中のものです。 XMLとの連携で下記のようなことを行いたいと思っています。 ・XMLを用いてアクセスログ(日計)を作ってみる。 ・(1)→(2)のように日々属性ノードが追加される。 【既存XML】 (1)<<AcLog.xml>>※2007/02/05 現在 ----------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <parent> <Accsess id="1"> <Date>20070205</Date> <Count>10</Count> </Accsess> </parent> (2)<<AcLog.xml>>※2007/02/06 現在 ----------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <parent> <Accsess id="1"> <Date>20070205</Date> <Count>10</Count> </Accsess> <Accsess id="2"> <Date>20070206</Date> <Count>1</Count> </Accsess> </parent> ----------------------------------------------------- 現在様々な参考書やネットサンプルなど見てはいるのですが、 どうしても<parent>の外で作成されてしまったりなど、 良い結果を生んでいません。 こんなことで質問するのはどうかとも思っておりますが、 サンプルサイトなどございましたらご教授ください。 よろしくお願いします。

    • 締切済み
    • PHP
  • XMLの属性値を取得する方法とは?

    お世話になります。 PHP初心者です。 PHPでXMLを解析したいと思っております。 ところで要素の属性を取得する方法ってあるのでしょうか? 例えば <book id="listing"></book> 要件としては、book要素のidを取得する。 getElementById("id") だとbook要素か、どうか分からないし、 getElementsByTagName("book") だとid属性が取得できないし・・・。 簡単なことなのかもしれませんが、どうぞよろしくお願いいたします。 言語:PHP5.2

    • 締切済み
    • PHP
  • XML::DOM / XML::XPathでソート

    XML::DOMで効率的なソートの方法はどんなものがありますでしょうか。 一応動くものは作れたのですが、効率的とは言い難く、しかも ソート項目が一意のデータでないといけないという欠点があります。 ############################################### use XML::DOM::XPath; my $xml = <<EOM; <?xml version="1.0" encoding="UTF-8" ?> <list> <item id="10">Apple</item> <item id="5">Orange</item> <item id="20">Melon</item> </list> EOM my $parser = XML::DOM::Parser->new(); my $doc = $parser->parse( $xml ); ## <item>タグの一覧を作成 my @list = $doc->findnodes('/list/item'); ## <item>タグ id属性一覧を作成 my @idlist = map{ $_->getAttribute("id") } @list; ## id属性順にソート foreach my $id ( sort{ $a<=>$b } @idlist ){ ## id属性値を指定してノードリストを取得 my @item = $doc->findnodes('/list/item[@id='.$id.']'); ## idは一意なのでリストの先頭で固定 print $item[0]->getAttribute('id')."\n"; print $item[0]->getFirstChild->getNodeValue."\n"; } ############################################### ハッシュなら sort{ $hoe{$b} <=> $hoe{$a} } keys %hoe といった方法があるのですが、XML::DOMの場合は同じようにいきません。 良い方法がありましたらお願いします。

    • ベストアンサー
    • Perl
  • xpath でn番目のテキストノード取得

    xpathで//text()とするとすべてのテキストノードが取得できますが、 この中からn番目のテキストノードを取得することは可能でしょうか? (プログラムでループではなく、xpathで。) <?xml version='1.0'?> <root><foo>aaa</foo><bar>bbb</bar><buz>bbb</buz></root> //text()[1]でaaaがとれるかと思ったんですが。。。 よろしくお願いします。

    • ベストアンサー
    • XML
  • XMLファイルのattribute値を取得するには?

    ASP内の処理でwebからXMLファイルをLoadし、 そこからattribute値を取得するにはどうすればよいのでしょうか? ちなみにXMLファイル取得は成功しています。 使用スクリプトはVBscriptです。 以下がロードしたXMLファイルの内容です。 <?xml version="1.0" encoding="Shift_JIS" ?> <xml> <AAA width="2.15" <--この2.15と height="4.60" <--この4.60を取得したい /> </xml> 以下が今、途中まで作っているソースです。 <% language = "VBscript" %> <% Dim XmlDoc, objXmlError, objXmlNode Set XmlDoc = CreateObject("MSXML2.DOMDocument") xmlDoc.async = false XmlDoc.setProperty "ServerHTTPRequest", true XmlDoc.load("http://localhost/test.xml") Set objXmlNode = XmlDoc.selectNodes("/root/AAA") ここから先がよくわからない %>

  • 要素の内容にxmlを入れたい

    次のようなxmlを作成しました。 <?xml version="1.0" encoding="UTF-8"?> <tns:StateChange xsi:schemaLocation="http://sample.com/Change.xsd" xmlns:tns="http://sample.com/XSDDefinition" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ServiceName>test</ServiceName> <wsdl></wsdl> </tns:StateChange> wsdl要素の内容として <?xml version="1.0" encoding="utf-8\"?><wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema".... といったいわゆるWSDLを文字列として指定したいと考えて、指定するとvalidate時にエラーになってしまいます。 xmlを要素の内容にしたい場合、どのようにすればいいのでしょうか?

    • ベストアンサー
    • XML
  • XMLのXPathについて

    下記のようなXMLがあるとして、XPathでdataノードを取得する場合、 /root/node/dataと/root/dataの二通りがあると思いますが、これを一つにまとめて書くことは可能でしょうか? また、dataノードに辿りつくのに、途中のパスがすべて把握できない場合(/root/AAA/data、/root/BBB/CCC/data。。。) XPathでdataノードを取得することができますでしょうか? GetElementsByTagName("data")にした方が良いでしょうか? <?xml version="1.0" encoding="UTF-8"?> <root> <node> <data>データ1です</data> </node> <node> <data>データ2です</data> </node> <data>データ3です</data> </root>

    • 締切済み
    • XML
  • XSL(異なるノードからエレメントを取得)

    XSLを書き始めたばかりでつまずいています。 下記のようなXMLファイルがあるとして… === <Menulist> <Menu No="1" Item="3" Time="100"/> <Menu No="2" Item="1" Time="60"/> <Menu No="3" Item="1" Time="120"/> <Menu No="4" Item="2" Time="10"/> </Menulist> <Setlist> <Set No="1"> <Set_name Name="Push Up" /> <Set No="2"> <Set_name Name="Run" /> <Set No="3"> <Set_name Name="Swim" /> </Setlist> ========= ここで、XSLを用いてMenulistのMenuのItemが1の時には、SetlistのSet Noが1の"PushUP"を取り出して、Menu Noとともに、Menuの数だけ表示したいのです。 こうしたあるノードのエレメントの値を使って、別のノードのエレメントの値を取得する方法をご教示ください。

    • ベストアンサー
    • XML