<a>0000 1111 <b>2222</b> 3333</a>のようなxmlがある場合、

php SimpleXML か XPATH で、a要素の中をインライン要素も含め、
"0000 1111 2222 3333" というように、
文字列を一括で取得する方法はありますか?

回答の条件
  • 1人2回まで
  • 登録:2009/06/19 14:58:41
  • 終了:2009/06/19 23:23:01

ベストアンサー

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/06/19 15:58:20

ポイント100pt

ご質問にあるXMLデータを $xmlhoge とします。

XML構造の上では、要素 a の中に要素 b が含まれていますから、素直に処理すると "0000 1111 3333 2222" という順序になってしまいます。

文字列の順序を保ったままにしたいのであれば、関数 strip_tags を使って、

strip_tags($xmlhoge);

としてはどうでしょうか。

id:gray-migrant

ありがとうございます。やっぱり、最初に文字列として処理してからパースするしかありませんか...。

2009/06/19 16:10:35

その他の回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/06/19 15:58:20ここでベストアンサー

ポイント100pt

ご質問にあるXMLデータを $xmlhoge とします。

XML構造の上では、要素 a の中に要素 b が含まれていますから、素直に処理すると "0000 1111 3333 2222" という順序になってしまいます。

文字列の順序を保ったままにしたいのであれば、関数 strip_tags を使って、

strip_tags($xmlhoge);

としてはどうでしょうか。

id:gray-migrant

ありがとうございます。やっぱり、最初に文字列として処理してからパースするしかありませんか...。

2009/06/19 16:10:35
id:sheile No.2

Sheile回答回数45ベストアンサー獲得回数162009/06/19 16:42:05

ポイント100pt

以下のXPathを用いると取得できるかと思います。

string(//a)

(stringは引数として渡されたノードが表す文字列を返します。Aタグが複数ある場合などは適宜修正をば)


PHP上でのXPath環境が手元に無かった為、Firefox3を用いてXPathの確認を行っています。

  • 使用したHTMLファイル

~省略~

<body>

<a>0000 1111 <b>2222</b> 3333</a>

</body>

~省略~


  • 確認用JavaScript

document.evaluate("string(//a)", document, null, XPathResult.STRING_TYPE, null).stringValue


  • 結果

0000 1111 2222 3333

id:gray-migrant

simplexmlの場合、

$xml = new SimpleXMLElement('1111 2222 3333 4444');

var_dump($xml->xpath("string(//a)"));

と、素直に型変換しても bool(false) が帰って来てしまいます。

SimpleXMLElement::xpath は、エラー時にfalseを返すので、

もしかすると型変換に対応していないのかもしれませんが、

なかなかそれも見付けられず、何とも困りました。

2009/06/19 18:36:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません