PHP での SimpleXML 処理

PHP で XML を処理するためのマークアップ専用ライブラリー

PHP のバージョン 5 にバンドルされた SimpleXML エクステンションについて学びましょう。SimpleXML エクステンションを使うと、PHP ページで XML をクリエリーし、検索し、修正し、そして PHP で使いやすい構文で再公開することができます。

Elliotte Rusty Harold, Adjunct Professor, Polytechnic University

Photo of Elliot Rusty HaroldElliotte Rusty Haroldはニューオーリンズ出身であり、時たま、おいしいgumbo(オクラ入りのスープ)を食べに帰っています。ただし現在はニューヨークのブルックリン近郊のProspect Heightsに、妻のBethと猫のCharm(charmed quarkからとりました)とMarjorie(義理の母の名前からとりました)と一緒に住んでいます。彼はPolytechnic Universityのコンピューター・サイエンスの非常勤教授として、Java技術とオブジェクト指向プログラミングを教えています。彼のCafe au Lait Webサイトは、インターネット上で最も人気のある独立系Javaサイトの一つです。また、そこから派生したCafe con Lecheは、最も人気のあるXMLサイトの一つです。彼の最近の著作には『Java I/O, 2nd edition』があります。現在はXML処理用のXOM APIやJaxen XPathエンジン、Jesterテスト・カバレッジ・ツールなどに取り組んでいます。



2006年 10月 10日

PHP のバージョン 5 では、XML を読み書きするための新しい API (application programming interface) である、SimpleXML が導入されています。例えば SimpleXML では、

$doc->rss->channel->item->title

のような表現を使って文書から要素を選択することができます。文書の構造をよく理解していれば、こうした表現を容易に書くことができます。もし対象となる要素が具体的にどこに現れるのかわからない場合には (Docbook や HTML、そしてそれと同様の叙述形式の文書ではよくあることです)、SimpleXML はそうした要素を XPath 式を使って見つけることができます。

SimpleXML を使い始める

例えば、RSS フィードを HTML に変換する PHP ページが欲しいとします。RSS は、シンジケート・コンテンツを公開するための基本的な XML フォーマットです。文書のルート要素は rss であり、1 つの channel 要素を含んでいます。channel 要素はフィードに関するメタデータ (タイトルや言語、URL など) を含んでいます。また channel 要素は、item 要素に囲まれたさまざまな情報も含んでいます。各 item は、URL を含んだ link 要素と、プレーン・テキストを含む title または description (通常はこの両方) を持っています。名前空間は使われません。RSS にはもっと説明すべきことがありますが、この記事で必要なのは以上です。リスト 1 は、いくつかのニュース・アイテムを含む典型的な例です。

リスト 1. RSS フィードの例
<?xml version="1.0" encoding="UTF-8"?>
<rss version="0.92">
<channel>
  <title>Mokka mit Schlag</title>
  <link>http://www.elharo.com/blog</link>
  <language>en</language>
  <item>
    <title>Penn Station: Gone but not Forgotten</title>
    <description>
     The old Penn Station in New York was torn down before I was born. 
     Looking at these pictures, that feels like a mistake.  The current site is 
     functional, but no more; really just some office towers and underground 
     corridors of no particular interest or beauty. The new Madison Square...
    </description>
    <link>http://www.elharo.com/blog/new-york/2006/07/31/penn-station</link>
  </item>
  <item>
    <title>Personal for Elliotte Harold</title>
    <description>Some people use very obnoxious spam filters that require you 
     to type some random string in your subject such as E37T to get through. 
     Needless to say neither I nor most other people bother to communicate with 
     these paranoids. They are grossly overreacting to the spam problem. 
     Personally I won't ...</description>

    <link>http://www.elharo.com/blog/tech/2006/07/28/personal-for-elliotte-harold/</link>
  </item>
</channel>
</rss>

では、任意の RSS フィードを HTML としてフォーマットする PHP ページを作りましょう。リスト 2 は、このページの様子を示すスケルトンです。

リスト 2. PHP コードのための静的スケルトン
<?php // Load and parse the XML document ?>
<html xml:lang="en" lang="en">
<head>
  <title><?php // The title will be read from the RSS ?></title>
</head>
<body>

<h1><?php // The title will be read from the RSS again ?></h1>

<?php
// Here we'll put a loop to include each item's title and description
?>

</body>
</html>

XML 文書を構文解析する

最初のステップは、XML 文書を構文解析し、それを変数の中に保存することです。これには 1 行のコードで十分です。このコード行で URL を simplexml_load_file() 関数に渡します。

$rss =simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');

警告を一言

ここで使っているスキーマは、まったく最適化されていません。本来は、ページをヒットする度に RSS フィードをロードして構文解析すべきではないのです。これでは、このページを読む人にとって応答が遅くなり、ロード中の RSS フィードに DoS (サービス不能) 攻撃をかけられる恐れがあります (大部分の RSS フィードは、最大の更新頻度を約 1 時間毎に 1 回と規定しています)。真のソリューションとしては、生成される HTML ページまたは RSS フィード、またはその両方をキャッシュする必要があります。しかしこの問題は SimpleXML ライブラリーと使うこととは直接関係しないため、ここでは意図的に無視しています。

この例では、http://partners.userland.com/nytRss/nytHomepage.xml にある Userland の New York Times フィードでページの中身を入れています。もちろん、こうする代わりに、他の任意の RSS フィードの任意の URL を使うこともできます。

simplexml_load_file() という名前にもかかわらず、この関数は、実はリモートの HTTP URL にある XML 文書を構文解析することに注意してください。この関数に関して驚くべきことは、それだけではありません。戻り値 (ここでは $rss 変数の中に保存されています) は、文書全体を指しません (これは、DOM (Document Object Model) など他の API での経験から想像されるかもしれません)。戻り値は、文書のルート要素を指すのです。文書の prolog と epilog の中にあるコンテンツには、SimpleXML からアクセスすることはできません。

フィードのタイトルを見つける

フィード全体に対するタイトル (フィードの中にある個々のストーリーのタイトルとは別です) は、rss ルート要素の子の channel の子の title の中にあります。このタイトルを、まるでその XML 文書が rss クラスの (title フィールドを持った channel フィールドを持つ) オブジェクトを単純にシリアライズしたものであるかのようにロードすることができます。PHP の一般的なオブジェクト参照構文を使った次のステートメントで、タイトルを見つけることができます。

$title =$rss->channel->title;

タイトルが見つかったら、そのタイトルを出力 HTML に追加しなければなりません。これは簡単です。単純に $title 変数をエコーすればよいのです。

<title><?php echo $title; ?></title>

この行は、要素全体ではなく要素のストリング値を出力します。つまり、テキストの内容は書き込まれますが、タグは書き込まれません。

次のように、中間変数 $title を完全に省略することもできます。

<title><?php echo $rss->channel->title; ?></title>

この値はページの中の何カ所かで繰り返し使われるため、説明的な名前の変数として保存した方が便利です。

アイテムを繰り返す

次に、フィードの中にあるアイテムを見つけなければなりません。このための式は明白で、次のとおりです。

$rss->channel->item

しかしフィードには、通常は複数のアイテムが含まれていますが、アイテムがまったく含まれていない可能性もあるかもしれません。そのため、このステートメントは配列を返します。この配列に対して、for-each ループを使って繰り返しを行います。

 foreach ($rss->channel->item as $item) {
  echo "<h2>" . $item->title . "</h2>";
  echo "<p>" . $item->description . "</p>";
}

RSS フィードから link 要素の値を読み取ることによって、簡単にリンクを追加することができます。PHP から a 要素を単純に出力し、$item->link を使って URL を取得します。リスト 3 はこの要素を追加し、そしてリスト 1 のスケルトンを埋めます。

リスト 3. 単純ながら完全な PHP RSS リーダー
 <?php // Load and parse the XML document 
$rss =  simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');
$title =  $rss->channel->title;
?>
<html xml:lang="en" lang="en">
<head>
  <title><?php echo $title; ?></title>
</head>
<body>

<h1><?php echo $title; ?></h1>

<?php
// Here we'll put a loop to include each item's title and description
foreach ($rss->channel->item as $item) {
  echo "<h2><a href='" . $item->link . "'>" . $item->title . "</a></h2>";
  echo "<p>" . $item->description . "</p>";
}
?>

</body>
</html>

PHP で単純な RSS リーダーを書くために必要なことは、これだけです。つまり何行かの HTML と、何行かの PHP のみです。空白を除けば、たった 20 行しかありません。もちろん、これは機能豊富でもなく、最適化もされておらず、堅牢な実装でもありません。では、こうした問題を解決するにはどうすべきかを見てみましょう。


エラー処理

すべての RSS フィードが完全に整形式なわけではありません。XML 仕様では、整形式エラーが検出されたら即座に文書の処理を停止するように要求されています。そして SimpleXML は、この仕様に準拠した XML プロセッサーです。しかし SimpleXML は、エラーを見つけてもあまり助けにはなりません。通常は、SimpleXML は警告を php エラー・ファイルにログし (ただし、詳細なエラー・メッセージは付けません)、simplexml-load-file() 関数が FALSE を返すだけです。構文解析の対象となるファイルの整形式性が疑わしい場合には、そのファイルのデータを使う前に、このエラーをチェックします (リスト 4)。

リスト 4. 不正な形式の入力をチェックする
<?php
$rss =  simplexml_load_file('http://www.cafeaulait.org/today.rss');
if ($rss) {
  foreach ($rss->xpath('//title') as $title) {
    echo "<h2>" . $title . "</h2>";
  }
}
else {
  echo "Oops! The input is malformed!";
}
?>

libxml_get_errors() メソッドは、もっと便利な、何が悪かったのかを示すデバッグ情報を返しますが、こうした情報はエンドユーザーに見せられるほど詳細ではないことが普通です。

この他の一般的なエラーとして、文書は整形式でありながら、本来あるべきところに本来あるべき要素が含まれていない、というケースがあります。最上位 100 の RSS フィードなどの場合、タイトルのないアイテムが 1 つくらいあるものですが、そうした場合には $doc->rss->channel->item->title のような式はどうなるのでしょう。最も単純な手法は、戻り値を必ず配列として扱い、それに対してループ繰り返しを行うことです。こうすれば、想定よりも要素が多かったり少なかったりする場合にも対応可能です。もし、(たとえ文書中に複数の要素があったとしても) 最初の要素のみが必要な場合には、インデックスをゼロから始めることで、それを求めることができます。例えば、最初のアイテムのタイトルを要求する場合には、次のように書きます。

$doc->rss->channel->item[0]->title[0]

最初のアイテムがない場合、あるいは最初のアイテムにタイトルがない場合、このアイテムは、PHP の配列での範囲外インデックスと同じように扱われます。つまり結果はヌルであり、出力 HTML に挿入される際に空のストリングに変換されます。

処理準備をしていない、予期せぬフォーマットを認識し、拒否するのは、通常は検証 XML パーサーの仕事です。しかし SimpleXML は、DTD (Document Type Definition) またはスキーマに対して検証することができず、整形式性のチェックしか行いません。


名前空間の処理

多くのサイトが、今や RSS から Atom に切り替えつつあります。リスト 5 は、Atom 文書の例です。多くの点で、この文書は RSS の例と似ています。しかし、Atom のメタデータはより多く、またルート要素は rss ではなく feed です。feed 要素には、アイテムの代わりにエントリーがあります。また description 要素に代わって content 要素があります。最も重要なこととして、RSS 文書では名前空間を使いませんが、Atom 文書では使います。そのため Atom 文書のコンテンツの中には、本物の、エスケープしない XHTML (Extensible HTML) を組み込むことができます。

リスト 5. Atom 文書
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US" 
      xml:base="http://www.cafeconleche.org/today.atom">
  <updated>2006-08-04T16:00:04-04:00</updated>
  <id>http://www.cafeconleche.org/</id>
  <title>Cafe con Leche XML News and Resources</title>
  <link rel="self" type="application/atom+xml" href="/today.atom"/>
  <rights>Copyright 2006 Elliotte Rusty Harold</rights>
  <entry>
    <title>Steve Palmer has posted a beta of Vienna 2.1, an open source 
           RSS/Atom client for Mac OS X. 
          </title>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml" 
          id="August_1_2006_25279" class="2006-08-01T07:01:19Z">

<p>
 Steve Palmer has posted a beta of <a shape="rect"
 href="http://www.opencommunity.co.uk/vienna21.php">Vienna
 2.1</a>, an open source RSS/Atom client for Mac OS X. Vienna
 is the first reader I've found acceptable for daily use; not
 great but good enough. (Of course my standards for "good
 enough" are pretty high.) 2.1 focuses on improving the user
 interface with a unified layout that lets you scroll through
 several articles, article filtering (e.g. read all articles
 since the last refresh), manual folder reordering, a new get
 info window, and an improved condensed layout.
</p>

</div>
    </content>
    <link href="/#August_1_2006_25279"/>
    <id>http://www.cafeconleche.org/#August_1_2006_25279</id>
    <updated>2006-08-01T07:01:19Z</updated>
  </entry>
  <entry>
    <title>Matt Mullenweg has released Wordpress 2.0.4, 
           a blog engine based on PHP and MySQL.
          </title>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml" 
           id="August_1_2006_21750" class="2006-08-01T06:02:30Z">

<p>
 Matt Mullenweg has released <a shape="rect"
 href="http://wordpress.org/development/2006/07/wordpress-204
 /">Wordpress 2.0.4</a>, a blog engine based on PHP and
 MySQL. 2.0.4 plugs various security holes, mostly involving
 plugins.
</p>
</div>
    </content>
    <link href="/#August_1_2006_21750"/>
    <id>http://www.cafeconleche.org/#August_1_2006_21750</id>
    <updated>2006-08-01T06:02:30Z</updated>
  </entry>

</feed>

Atom 文書では要素名が変わっていますが、SimpleXML で Atom 文書を処理するための基本的な手法は RSS を処理する場合と同じです。1 つ異なるのは、名前付きの要素を要求する際に、ローカル名と共に名前空間 URI (Uniform Resource Identifier) を指定する必要がある点です。これは 2 段階のプロセスです。まず、children() 関数に名前空間 URI を渡すことによって、対象とする名前空間にある子要素を要求します。次に、その名前空間での正しいローカル名を付けて要素を要求します。例えば、まず Atom フィードを変数 $feed にロードするとします。そうすると次のようになります。

$feed = simplexml_load_file('http://www.cafeconleche.org/today.atom');

title 要素を見つけるための行が、今度は 2 行あります。

$children =  $feed->children('http://www.w3.org/2005/Atom');
$title = $children->title;

このコードを 1 つの命令にまとめることができますが、行が少し長くなってしまいます。名前空間の中にある他の要素にも同様な処理が必要です。リスト 6 は、名前空間を持つ Atom フィードのタイトルを表示する、完全な PHP ページを示しています

リスト 6. Atom のヘッドラインを読み取る単純な PHP
<?php $feed =  simplexml_load_file('http://www.cafeconleche.org/today.atom');
$children =  $feed->children('http://www.w3.org/2005/Atom');
$title = $children->title;
?>
<html xml:lang="en" lang="en">
<head>
  <title><?php echo $title; ?></title>
</head>
<body>

<h1><?php echo $title; ?></h1>

<?php

$entries = $children->entry;
foreach ($entries as $entry) {

  $details = $entry->children('http://www.w3.org/2005/Atom');
  echo "<h2>" . $details->title . "</h2>";
}
?>

</body>
</html>

複合コンテンツ

この例でヘッドラインしか表示しなかったのはなぜでしょう。Atom でのエントリーのコンテンツは、その情報のフル・テキストを含むからです。つまり単なるプレーン・テキストでもなく、すべてのマークアップも含むのです。これは叙述的な構造です。つまり、ある行の単語群は、人に読み取られることを想定しているのです。そうしたデータは、当然のこととして複合コンテンツを大量に含んでいます。XML はもはや単純なものではなくなっているため、SimpleXML の手法には少し欠陥が見え始めています。SimpleXML は、常識的な方法では複合コンテンツを処理できません。そのため、SimpleXML が使えないケースが数多くあります。

1 つ方法がありますが、これは部分的な解決でしかなく、content 要素が真の XHTML を含んでいるため動作するにすぎません。この XHTML を、asXML() 関数を使って、構文解析されていないソース・コードとして出力に直接コピーするのです。これを下記に示します。

echo "<p>" . $details->content->asXML() . "</p>";

これによって、リスト 7 のようなものが生成されます。

リスト 7. asXML の出力
<content type="xhtml">
    <div xmlns="http://www.w3.org/1999/xhtml" 
        id="August_7_2006_31098" class="2006-08-07T09:38:18Z">
    <p>
 Nikolai Grigoriev has released <a shape="rect"
 href="http://www.grigoriev.ru/svgmath">SVGMath 0.3</a>, a
 presentation MathML formatter that produces SVG written in
 pure Python and published under an MIT license. According to
 Grigoriev, "The new version can work with multiple-namespace
 documents (e.g. replace all MathML subtrees with SVG in an
 XSL-FO or XHTML document); configuration is made more
 flexible, and several bugs are fixed. There is also a
 stylesheet to adjust the vertical position of the resulting
 SVG image in XSL-FO."
    </p>
    </div>
  </content>

これは純粋な XHTML ではありません。Atom 文書から content 要素が入り込んでいますが、本来は入るべきものではありません。もっと悪いことに、この要素の名前空間は間違っており、何のためのものかを認識できません。幸い、Web ブラウザーは認識できないタグを単純に無視するため、この余分な要素があるために生じる現実的な害はありません。完成した文書は無効ですが、だからといって大きな問題にはなりません。もしこれが非常に気になるのであれば、ストリング操作で取り去ってしまえばよいのです。下記を見てください。

  $description = $details->content->asXML();
  $tags = array('<content type="xhtml"'>", "</content>");
  $notags  = array("", "");
  $description = str_replace($tags, $notags, $description);

このノードをもう少し頑強にするには、開始タグが上記とまったく同じであることを想定するのではなく、正規表現を使います。特に、さまざまな属性を考えることができます。

  // end-tag is fixed in form so it's easy to replace
  $description = str_replace("</content>", "", $description);
  // remove start-tag, possibly including attributes and white space
  $description = ereg_replace("<content[^>]*>", "", $description);

このような改善をしたとしても、やはりコメントや処理命令、CDATA セクションなどには対応できません。どのように工夫しても、単純にはいかないようです。複合コンテンツは、単純に SimpleXML の設計の想定を越えているのです。


XPath

どの要素が文書の中にあり、どこにあるかが具体的にわかっているのであれば、$rss->channel->item->title のような式は素晴らしいものです。しかし、必ずわかるとは限りません。例えば XHTML では、見出し要素 (h1、h2、h3 など) が body や div、table などの要素の子である場合があります。さらに、div やtable、blockquote などの要素は、お互いの中に何度もネストすることができます。多くの場合、要素が使われている場所があまり明確でないので、//h1 や //h1[contains('Ben')] のような XPath 式を使った方が簡単です。SimpleXML では、この機能を xpath() 関数で実現しています。

リスト 8 は、RSS 文書の中にあるすべてのタイトル (フィード自体のタイトルと、個々のアイテムのタイトルの両方) をリストアップする PHP ページです。

リスト 8. XPath を使ってタイトル要素を見つける
<html xml:lang="en" lang="en">
<head>
  <title>XPath Example</title>
</head>
<body>

<?php
$rss =  simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');
foreach ($rss->xpath('//title') as $title) {
  echo "<h2>" . $title . "</h2>";
}
?>

</body>
</html>

SimpleXML は、XPath のロケーション・パスとロケーション・パスの結合しかサポートしておらず、ノード・セットを返さない XPath 式 (count(//para) や contains(title) など) をサポートしていません。

PHP のバージョン 5.1 から、SimpleXML は 名前空間を持つ文書に対して XPath クエリーを行うことができます。XPath では常にそうですが、検索される文書がたとえデフォルト名前空間を使っていたとしても、ロケーション・パスは名前空間接頭辞を使う必要があります。registerXPathNamespace() 関数は、次のクエリーで使えるように、接頭辞と名前空間 URI とを関連付けます。例えば、ある Atom 文書の中の title 要素を見つけたい場合には、リスト 9 のようなコードを使います。

リスト 9. 名前空間を持つ XPath を使う
$atom =  simplexml_load_file('http://www.cafeconleche.org/today.atom');
$atom->registerXPathNamespace('atm', 'http://www.w3.org/2005/Atom');
$titles = $atom->xpath('//atm:title');
foreach ($titles as $title) {
  echo "<h2>" . $title . "</h2>";
}

最後の警告として、PHP での XPath は非常に低速です。この XPath 式に切り替えたことによって、ロードされていないローカル・サーバー上でも、ほんの一瞬であったページ・ロードが数秒かかるようになりました。この手法を使って妥当なパフォーマンスを得るためには、何らかのキャッシングを使う必要があります。すべてのページを動的に生成しようとするのは、基本的に無理なのです。


まとめ

SimpleXML は、複合コンテンツを扱う必要がないのであれば、PHP プログラマーのツールキットに追加する価値のあるものです。その使い道は広範です。特に、単純な、レコード風のデータをうまく処理することができます。文書が深すぎず、複雑すぎず、複合コンテンツを持たない限り、SimpleXML を使った方が DOM を使うよりもずっと容易です。また、文書の構造が事前にわかっている場合にも SimpleXML は便利です (もちろん、そうした制約の少なさでは XPath の方がはるかに優れています)。妥当性検証ができないこと、複合コンテンツがまったくサポートできないことは不便ですが、必ずしも決定的な問題になるとは限りません。単純なフォーマットは複合コンテンツを持たないことが多く、データ・フォーマットを正確に予測できることが多いものです。そうした例に皆さんの作業が当てはまる場合には、ぜひ SimpleXML を試してみてください。エラー処理に注意し、パフォーマンスの問題を緩和するために少しキャッシュ動作を工夫すれば、PHP 内部から XML を処理するための信頼できる頑強な処理手段として、SimpleXML を活用できるのです。

参考文献

学ぶために

  • SimpleXML の公式資料を見てください。PHP バージョン 5 のマニュアルを調べ、通常のプロパティー・セレクターや配列イテレーターで処理可能なオブジェクトに XML を変換する、このツールセットに関する情報を得てください。
  • XML のほとんどすべてを網羅した入門書、『XML in a Nutshell (XML クイックリファレンス)』(Elliotte Rusty Harold と W. Scott Means の共著、2005 年 O'Reilly 刊) を読み、XML と XPath を深く学んでください。
  • Ajax RSSリーダー」(Jack D. Herrington 著、developerWorks、2006年5月) を読んでください。データベースや JavaScript コード、DOM を使って PHP で RSS リーダーを作成するための、もう 1 つの、そしておそらく優れた手法を解説しています。
  • Atom 1.0 Syndication Formatの概要」(James Snell 著、developerWorks、2005年8月) を読んでください。人気の Atom Syndication Format が他のシンジケーション・フォーマットに比べて技術的な強みがあることを解説し、また、効果的な使い方の例をいくつかあげています。
  • XML および関連技術において IBM 認証開発者になる方法についてはこちらを参照してください。
  • XML 記事一覧 を利用してください。developerWorks XML ゾーンには、広範な話題を網羅した技術記事やヒント、チュートリアル、IBM レッドブックなどが用意されています。
  • developerWorks technical events and webcasts で最新情報を入手してください。

製品や技術を入手するために

  • 皆さんの次期開発プロジェクトを、IBM trial software を使って構築してください。developerWorks から直接ダウンロードすることができます。

議論するために

  • XML zone discussion forums に参加してください。これらのフォーラムでは、XML を中心に議論が行われています。
  • developerWorks blogs から developerWorks のコミュニティーに加わってください。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Open source
ArticleID=243383
ArticleTitle=PHP での SimpleXML 処理
publish-date=10102006