オブジェクトと文字列の比較で困っています

このQ&Aのポイント
  • オブジェクト型(object)と文字列(string)の比較がうまくいかずに困っています。gettypeで調べたら、$nmはstring $xml->$data->nmはobjectとなっていたので、オブジェクトをstrvalで変換してみたのですが変わらずです。
  • 上記のコードで、$nm != $xml->$data->nm が有効な比較となりません。オブジェクトと文字列の比較をうまく行う方法はありますか?
  • 助けてください!オブジェクト型と文字列型の比較で問題が発生しています。どうすればうまく比較できるでしょうか?
回答を見る
  • ベストアンサー

オブジェクトと文字列の比較

いつもお世話になっております。 オブジェクト型(object)と文字列(string)の比較がうまくいかずに 困っている次第です。 ご教授願えないでしょうか。 [sample.xml} <item> <data0> <cd>00001</cd> <nm>yahoo</nm> </data0> <data1> <cd>00002</cd> <nm>google</nm> </data1> [php] $nm = 'google' $filename = sample.xml $j = 0; if($xml = simplexml_load_file($file_name)){ $cnt = count($xml); for($i=0; $i<$cnt; $i++){ $data = 'data' .$i; if($nm != $xml->$data->nm){ $data[$j++] = $xml->$data->nm; } } } 上記とした際、$nm != $xml->$data->nm が有効な比較となりません。 gettypeで調べたら、$nmはstring $xml->$data->nmはobjectとなっていたので、 オブジェクトをstrvalで変換をしてみたのですが変わらず。 どうにか比較できるようにしたいのですが、 お手数ですが、宜しくお願い致します。

  • prr4e
  • お礼率48% (66/136)
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.1

$simple_xml = simplexml_load_file($file_name); $data = $simple_xml->xpath( '/item/*[starts-with(local-name(),"data")]/nm[text()!="google"' );

prr4e
質問者

お礼

対応有難う御座います。 助かりました。

関連するQ&A

  • xml取得値を文字列と比較

    いつもお世話になっております。 オブジェクト型(object)と文字列(string)の比較がうまくいかずに 困っている次第です。 ご教授願えないでしょうか。 一度質問後閉じたのですが、うまくいかず再度質問させて下さい。 [sample.xml} <item> <data0> <cd>00001</cd> <nm>yahoo</nm> </data0> <data1> <cd>00002</cd> <nm>google</nm> </data1> <data2> <cd>00003</cd> <nm>google_1</nm> </data2> <data3> <cd>00004</cd> <nm>google_2</nm> </data3> [php] $cd = '00003' $filename = sample.xml $j = 0; if($xml = simplexml_load_file($file_name)){ $cnt = count($xml); for($i=0; $i<$cnt; $i++){ $data = 'data' .$i; if($cd !== $xml->xpath($data .'/cd')){ $data[$j++] = $xml->$data->nm; } } } 上記とした際、$nm != $xml->$data->nm が有効な比較となりません。 php の cdのみを配列に書き出したいです。 $xml->xpath($data .'/cd')でDisplayしてみると。 arrayとしか表記されません。 色々調べたりしたのですが、 お手数ですが、教えて下さい。

    • ベストアンサー
    • PHP
  • Java ファイルオブジェクトでなく文字列オブジェクト?

    JavaでXMLをパースするプログラムを初めて試しています。 parseメソッドの第一引数がファイルオブジェクトなのですが、これをメモリ(文字列)オブジェクトを与えて同じ動作させるものはあるのでしょうか? // SAXパーサーファクトリを生成 SAXParserFactory spfactory = SAXParserFactory.newInstance(); // SAXパーサーを生成 SAXParser parser = spfactory.newSAXParser(); // XMLファイルを指定されたデフォルトハンドラーで処理します parser.parse(new File("helloworld.xml"), new InsXMLParser()); ※このように String str = "<xml? ......"; parser.XXXXXX(str, new InsXMLParser

    • ベストアンサー
    • XML
  • 文字列の比較について

    BufferedReaderでファイルを読んだのちに、見出しの文字列をカンマで分割して 文字列を比較しようとしています。 ですが、分割すると、文字列が別な文字コードによる表記に変わってしまいます。 なぜでしょうか? また、解決方法などのヒントなどあれば教えてください。 BufferedReader buffReader = new BufferedReader( new FileReader("/home/masa/Desktop/Sample.csv")); String s; int ini=0; int wamei=0; int i=0; while((s = buffReader.readLine())!= null){ String[] str = s.split(",", -1); //System.out.println(s); if (i == 0) { for(int j=0; j<str.length;j++){ System.out.println(String.toString(str)); if(str.equals("五十音")){ini = j;} System.out.println("五十音"+ini); if(str.equals("a")){wamei = j;} System.out.println("和名"+wamei); //System.out.println(j); } } i++;

    • ベストアンサー
    • Java
  • シリアライズしたオブジェクトの文字列取得

    シリアライズしたオブジェクトのバイナリデーターを DB登録やViewStateのごとく扱いたいと思っています。 手順としては 1.シリアライズ可能なオブジェクトを作成 2.1のオブジェクトをシリアライズ(バイナリデータ取得・ファイル書き込みはしない) 3.2のバイナリデーターをbase64エンコード 4.DBなどへ保存 といった手順で考えています。 手順2でシリアライズしたデータを バイナリで取得する方法がわかりません(ファイル出力やXML出力は サンプルがたくさん見つかりますが。) 以上、宜しくお願いします

    • ベストアンサー
    • Java
  • 文字列の中の1文字を比較するには?

    XP,Studio.NETでC++を書いています。 文字列の中の1文字を比較したいのですがどのようにしたらいいのかわかりません。 今以下のような文字列がstring[300]に入っているとします。 「\nは改行コードです。printf("");では"から"までの文字が画面に表示されます。」 このとき、1文字ずつを取り出し、文字を比較したいのですが (iを増加) if(string[i]=='\') flag=1; //処理→次にnが来る。 if(string[i]=='"') flag=2; //処理→文字はダブルコーテーション という処理をしたいのですが、 エラー:定数が多すぎます。 エラー:定数が2行目に続いています。 と出ます。どうしたらいいのでしょうか? どなたか教えていただけると幸いです。

  • 高速に文字列の比較

    高速に文字列の比較 open(IN,"$file"); while (<IN>) { my($ip,$flag) = split(/,/,$_); if($flag==1){$data .= "$ip,";} } close(IN); open(IN,"$file2"); while (<IN>) { my($ip,$x,$z) = split(/,/,$_); foreach ( split(/,/, $data) ) { if ($ip eq $_) {$xdata.= "$ip,$x,$z\n";} } close(IN); 1.$fileで、$flagが1なら$ipを変数$dataに加えます。 2.$file2の$ipが、$dataの$ipに含まれていれば,$file2のデーターを$xdataに加えます。 上記の書き方で一応比較は出来ているようなのですが、perlの知識があまりない素人が適当に考えた書き方なので、自信がありません。 $data .= "$ip,";の$ipの後ろに,を入れている部分も何だか変なのですが、他の書き方が思いつけません。 書き方が間違っている場合や、こうすればもっと高速に動作させられるという書き方があれば、ご指導いただけると幸いです。 $fileも$file2も、100万行あたりまで増える見込みなので、出来るだけサーバーに負荷のかからない書き方ができればと思っています。 お手数ですが、どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • PHPでの文字列の扱い

    以下のPHPを書きましたが if文の$aに期待する値が入りません。この場合はどのようにすればよいのでしょうか? $a = "\$item[2] == \"1\" || \$item[2] == \"4\""; $Data = file("data.csv"); for($i = 0; $i < sizeof($Data); $i++){ $item = explode(",", $Data[$i]); if($a){ include('list.php'); } }

    • 締切済み
    • PHP
  • バイナリ文字列の比較について

    テキストをバイナリで読み込んで文字列を比較する際に 下記のロジックだと2バイトずつ読み込んで比較していくのですが 比較したい文字列が"He"だと合致するのですが1バイトずれの "el"だと合致しません。 ストリーム内の任意の文字列を判定したいときはどのように修正すればよいでしょうか? ----sample.txt--- Hello World!! ---------------- byte[] buf = new byte[2]; FileInputStream in = new FileInputStream("sample.txt"); int b; while ((b = in.read(buf)) != -1) { if ("He".equals(new String(buf))) { System.out.println("HelloのHeはOK"); } if ("el".equals(new String(buf))) { System.out.println("HelloのelはNG"); } }

    • ベストアンサー
    • Java
  • 動的に生成した文字列の配列を返す関数について

    動的に生成した文字列の配列を返す関数について お世話になります。 動的に文字列の配列を生成する関数を作ったのですが、 配列をうまく受け渡すことができず困っています。 以下のように入力された件数の数だけ "abc 0"~"abc n"という文字列を生成を行っています。 関数自体は期待通りの動作をしているようなのですが、 (Test1関数の最後でbfを確認しました) 呼び出し側にうまく配列を渡すことができません。 以下にソースを掲載いたしますのでどなたかご教示いただけたらと思います。 環境はVisualStudio2005です。 よろしくお願いします。 #include <stdio.h> #include <string.h> #include <stdlib.h> void Test1(char **bf, int *cnt) { int i; int kensu; int charlength; char num[10]; char **nm1 = NULL; char **nm2 = NULL; printf("件数を入力:"); scanf("%d",&kensu); for(i=0; i < kensu; i++) { nm2 = (char**)realloc(nm1, sizeof(char*) * (i + 1)); nm1 = nm2; charlength=128; nm1[i] = (char*)malloc(sizeof(char) * (charlength)); strcpy(nm1[i], "abc "); itoa(i, num, 10); strcat(nm1[i], num); } bf = nm1; *cnt = i; return ; } void main() { int cnt; char **bf = NULL; Test1(bf, &cnt); printf("START\n"); printf("全部で%d件。\n", cnt); for(int i=0;i < cnt;i++) { printf("%s\n",bf[i]); } free(bf); printf("END\n"); }

  • VC++「オブジェクト参照がオブジェクト・・・・

    Stringで2次元配列をやりたいと思っているのですが、 array<array<String^>^>^ addr_eeprom02; このような宣言をしたのですが、 次のようなプログラムを実行使用とすると addr_eeprom02[cnt_test][1] = data->Substring( 1, 8 ); ビルドは通ったのですが、デバッグしていくと 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 というエラーが出ます。 解決方法などありませんでしょうか?

専門家に質問してみよう