解決済みの質問

xml

今契約してるサーバーがSQLをつけるとものすごい金額になってしまうので。XMLに挑戦中です。
作ってみたのですが、ソースが間違ってる?のか表示できません、教えてください.

name.xml

<?xml version="1.0" encoding="shift-jis"?>
<test no="1">
<name>test</name>
<no>10</no>
<tel>123-456-789</tel>
</test>

test.php

<html>
<head>
<title>sample1</title>
</head>
<body>
<?php
$doc->load("name.xml");

$name = $doc->selectSingleNode("test");
$list = $name->selectNodes("*");
$no = $list->item(1);

$text = " 番号 " . $no . "<br>";
print $text;

?>
</body>
</html>

投稿日時 - 2004-08-06 06:24:02

連想キーワード:

QNo.952587

困ってます

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

えっと、その契約しているサーバでは XML を
使うモジュールがインストールされているでしょうか?

サーバが Windows なのか UNIX なのかで話が
かなり変わってきます。
onoyoko さんが最初にあげられたプログラムは
Shift-JIS をつかって、まるで MSXML を使っている
ように見えたので、Windows サーバと推測したのですが、

■ Windows サーバの場合

<html>
<head>
<title>sample1</title>
</head>
<body>
<?php
// XMLDOMオブジェクトの作成
$doc = new COM('MSXML2.DOMDocument');
// 文書を最後まで読み込む設定
$doc->async = false;
// XML文書の読み込み
$doc->load("D:\\Projects\\name.xml");

// TEST ノードの検索
$node_test = $doc->selectSingleNode("test");
// TEST ノード直下のノードすべて検索
$nodes_test = $node_test->selectNodes("*");
// TEST ノード直下の2個目のノード(NO ノード)を取得
$node_no = $nodes_test->item(1);
// NO ノードのテキストを取得して文字列生成
$text = " 番号 " . ($node_no->text) . "<br>";
print $text;

?>
</body>
</html>

これで僕の環境でも動作しました。

http://www18.tok2.com/home/koumori27/xml/mxphp/mxphp3.html
を参考にして下さい。

■ UNIX サーバの場合

<?php
$dom = domxml_open_file("name.xml");
?>
でエラーが出なければ、DOM XML がインストールされて
います。もしエラーが出たのであれば、契約のサーバで
XML を使うのは、ちょっと面倒になります。

http://php.s3.to/man/ref.domxml.html

投稿日時 - 2004-08-06 15:52:14

お礼

エラーが出てしまうので、契約しているサーバー会社への確認をしてみます。

とてもよく理解できました、ありがとうございました。

投稿日時 - 2004-08-07 01:34:48

ANo.3

2人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(2件中 1~2件目)

ANo.2

???

ちょっと超基本的な事確認させてもらって失礼ですが、
$doc って変数、どこかで XML Document クラスとして
初期化していますよね。

投稿日時 - 2004-08-06 12:27:23

補足

いいえしていません(汗
大変申し訳ございません、基本的な事が分かっていないようです。
教えて頂けますでしょうか?
宜しくお願いいたします。

投稿日時 - 2004-08-06 13:34:02

ANo.1

$no 変数は <no> ノードを指していると思いますが
ノードの中のテキストノードを取得する為に

> $text = " 番号 " . $no . "<br>";

$text = " 番号 " . $no->text . "<br>";

に変更してみてください。

あと、私は Apache for Win32 に Windows 版 PHP を
利用したので

$doc->load("name.xml");
においては
$doc->load("D:\\folder\\name.xml");
みたいにフルパスで指定しないと正常に読み込んで
くれませんでした。

投稿日時 - 2004-08-06 10:10:23

補足

サーバーはapacheを使用していますが、Win用かは、わかりません、Apache/1.3.27と書いてあります。

環境がちょっと違うかもしれませんが、name.xmlは
/index.htmlと同じ階層ですので
$doc->load("name.xml");でいいんですよね?

ノードの取得は変更してみましたが、表示されません。

エラーメッセージは
Fatal error: Call to a member function on a non-object in /usr/local/apache/htdocs/test.php on line 6 とでます。

投稿日時 - 2004-08-06 10:32:18

あわせてチェックしたい
  • XML DOMについて ...
  • 231,456,789のエクセルでの計算方法 ...
  • googlemapAPIとXML-RPC ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら