人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: gray-migrant
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP XML XPath 文字列
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●100ポイント ベストアンサー

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

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

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

strip_tags($xmlhoge);

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

◎質問者からの返答

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


2 ● Sheile
●100ポイント

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

string(//a)

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


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

?省略?

<body>

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

</body>

?省略?


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


0000 1111 2222 3333

◎質問者からの返答

simplexmlの場合、

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

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ