• 締切済み

XPathGraphでノードの値を取得できない

IT戦記経由で知った http://d.hatena.ne.jp/amachang/20080425/1209098271 XPathGraph http://xpath.kayac.com/ なるサービスがあります。 テストのために, Windows Live SkyDriveにアップロードした http://qfrfbw.bay.livefilestore.com/y1pR1j83PrREpBohBHZsCgD8GDU8FdFa4EArE7o6flrxaCyM3pSbtxD69QyPvue3X2p2-97-V9oNadelUXUfaHXaA/20080430-2.xml のtest要素のテキストノードを数値として扱った時の値55を取得しようと URLを打ち込み XPathを number(/test/text()) としたのですが, 値が取得できませんでした とされてしまいました。 何か条件が足りないのでしょうか?

  • XML
  • 回答数1
  • ありがとう数4

みんなの回答

回答No.1

Exchanger XML Editorでは、 number(/test/text()) で、正しく値が取得できますが、 XPathGraphではだめですね。 いろいろ試してみたところ /* で、取得できました。 XPathGraphはperlで作ってあるみたいなのでperlのXPathを扱うライブラリの ルートノードの扱いに問題があるのかもしれませんね。 XMLを <test> <value>55</value> </test> という内容に変えて、 number(/test/value) としてみたらどうでしょうか?

himajin100000
質問者

お礼

追記(既にお礼じゃない): テストで,XPathのdocument()関数も忘れちゃいけないぜっ!

himajin100000
質問者

補足

>/* >で、取得できました。 何ででしょうね? http://qfrfbw.bay.livefilestore.com/y1pklFRcA-uEhKF3v0930rfXThcLAwbgokzmDgg2ywDv5q6NZMr-R_ehCgDwJna9zXFxvttIRv7gvAcX13leRKifxYqJBJRSedP/20080430-10.xml 用意してみました・・・が, number(/test/value) どころか /test/value すら駄目ですorz 試したい意地悪なテストケースが山ほど(zipファイル)あるのに http://cid-b89cb784f5346675.skydrive.live.com/browse.aspx/Diary/20080430?uc=1

関連するQ&A

  • 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でノード内にある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
  • XMLとの連携でノードの長さを取り出す方法

    PHP--------------------------------------------- $xpath = "/qq:album/img"; $xpath = mb_convert_encoding($xpath,"UTF-8","SJIS"); $x_array = $ctx->xpath_eval($xpath); $title_element = $x_array->nodeset[0]; $title = $title_element->get_attribute("title"); $title = mb_convert_encoding($title,"SJIS","UTF-8"); XML---------------------------------------------- <?xml version="1.0" encoding="EUC-JP"?> <qq:album xmlns:qq="www.phpdom.com"> <img title="ABC"> <img title="DEF"> <img title="GHI"> <img title="JKL"> </qq:album> こんにちは。 http://www.geocities.jp/xmlfirststep/dom/dom4.html のサイトを参考に、上のようなスクリプトを書きました。albumという名の親ノードの下にあるimgノードの要素titleを抜き出すものです。このimgノードをXMLで複数つくり、phpでその長さを自動で返してもらおうと思ったのですがそのやり方がわかりません。 色々なサイトを回りましたが、キーワード「length」で探してもそれらしき情報がまったく見つかりません。 どうすればノードの長さを返してもらえるのでしょうか?

    • ベストアンサー
    • PHP
  • XML::XPath -- 追加したノードが見付からない

    XMLのテンプレートを既存のXMLに追加したのですが、 その後 findnodes() で検索しても合致しません。 XML::XPath::Node::Element->new() を使って作成したものは 合致してくれます。 XML::XPath::XMLParser でパースしたものを追加して findnodes() で合致させるにはどのようにしたらよいのでしょうか。 ------------------------------- use XML::XPath; #### 元のXML my $xmldata = <<EOM; <?xml version="1.0" encoding="UTF-8" ?> <list>   <item>orange</item>   <item>apple</item>   <item>lemon</item> </list> EOM ### 追加するXMLのテンプレート my $xmlappend = <<EOM;   <item>pine</item> EOM ## 追加先ノードを取り出す my $xml = XML::XPath->new( xml=>$xmldata ); my ($list) = $xml->findnodes('/list'); ## 追加用XMLを作成して追加 my $append = XML::XPath::XMLParser->new( xml=>$xmlappend )->parse; $list->appendChild( $append ); ## もういっこ追加。こちらはこの場で作る $newnode = XML::XPath::Node::Element->new('item'); $newtext = XML::XPath::Node::Text->new('banana'); $newnode->appendChild( $newtext ); $list->appendChild( $newnode ); ## 現状確認 → pine は入っていた print $list->toString."\n"; ## item一覧を取得 @nodes = $xml->findnodes('/list/item'); ## 一覧を出力 → 追加した pine が出力されない。 bananaはある。 map{ print $_->toString."\n" } @nodes;

    • ベストアンサー
    • Perl
  • xpathでノードのポジションを得る

    position()でポジションを取得したいのですが、 <xsl:apply-templates select="//test[position()]" /> のようなかんじにしてtestノードのposition()リストを 取得するようなことはできないのでしょうか。 まあ、 <xsl:template match="test"> <xsl:value-of select="position()" /> </xsl:template> こういうテンプレートつくれば結果的に取れると思うんですが、 今回はこれはなしでお願いします。 xpathだけでpositionをしゅとくできないものでしょうか。

    • ベストアンサー
    • XML
  • RDFの名前空間の要素をxpathで取得したい

    http://xurrency.com/2.5/usd/to/jpy/feed こちらのURLのdc:valueの値を取得したく、今日初めてPHPを使ってみました。 ネットのいろいろなサンプルを見てみると、xpathで取得できることがわかり、 取得したい値が名前空間という要素だということがわかりました。 コードを書いてみたのですが、ブラウザで読み込むと「Array」という数値が 戻ってきてしまいます。dc:valueの値を取得するにはどのようにコードを 書けばよいでしょうか? (サーバーのPHPのバージョンは5.2.6です。) <?php $xml = simplexml_load_file("http://xurrency.com/2.5/usd/to/jpy/feed"); $xml->registerXPathNamespace('dc', 'http://purl.org/dc/elements/1.1/'); $result = $xml->xpath("//dc:value"); echo $result; ?>

    • ベストアンサー
    • PHP
  • .netのXmlDocumentを使ってテキストノードのタブや改行を無視する方法

    .NETのXmlDocumentオブジェクト等を使って、XMLファイルを読み込むプログラムを作っているのですが、 XmlNode.InnerTextでテキストノードの値を取得した場合、 タブや改行を含んだテキストが取得されてしまいます。 文字の部分だけを取得したいのですが、方法がわかりません。 ご存知の方が折られましたら、ご教示ください。 よろしくお願いいたします。 ---- <Example> (TAB)あいう(改行) </Example> とある場合、「あいう」だけ取得したいのですが、 「(TAB)あいう(改行)」と取得されてしまいます。

    • ベストアンサー
    • XML
  • JavaScriptでXPath

    こんにちは、教えてください。 これまでVC#やVBでXMLを扱っていましたが、その際にはXPathでノードの参照することが多かったです。 今JavaScriptをやむなくいじっているのですが、JavaScriptで動的に生成したXHTMLをXPathで参照したいのですが、これは可能でしょうか? getElementByIdやgetElementsByTagName、ChildNodeなどDomでの操作用の関数がいくつかありますが、参照はこれでもいいのですが、ノードの追加や属性、テキストの追加などをやっていると、ちょっと物足りません。というかXPathが使いたいのです。どう考えてもXPathは楽です。 できるならやりたいのですが、ご存知であれば教えてください。

  • テキストノードの文字列に一致した要素の取得(xPath

    xml,xslを勉強しているのですが、xPathの指定が上手く定義できない状態です。ご教授の程お願い致します。 下記がxml,xslです <!-- アーティスト名とタイトルを明記したxml --> -- music.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="music.xsl"?> <music> <artist> Ciel <title>wake</title> </artist> <artist> Flew <title>BANG</title> </artist> <artist> cobu                 // (1) <title>calling</title> </artist> <artist> cobukure <title>dammy</title> </artist> </music> <!-- 条件に一致したアーティスト名、タイトルを表示するxsl --> -- music.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head><title></title></head> <body> <xsl:for-each select = "descendant::artist[contains(text(),'cobu')]"> // (2) <xsl:value-of select ="text()" />: <xsl:value-of select ="title" /><br/> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet> //上記の処理結果 cobu :calling cobukure :dammy //希望する処理結果 cobu :calling ・質問内容 XMLのartistのテキストノード=cobuをxsl:for-eachでselectして、 titleのcallingを表示したい 本、サイトなどで調べて、 descendant::artist[contains(text(),'cobu')]のxPathまでは、 導けたのですが、この場合は、cobuを含むので、 artistのテキストノード=cobukureもselectされdummyが表示されてしまいます。 処理結果、 cobu :callingのみselectできるxPathの定義をご教授の程お願い致します

    • ベストアンサー
    • 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

専門家に質問してみよう