0

いくつかの xml ファイルを操作するために php を使用しようとしています。PHP simpleXML Web サイトの説明といくつかの例を読みましたが、xml から必要なものを取得するのに問題があります。
私はxmlを制御できません。xml ファイルのスニペットを次に示します。

<end-user-emails>
    <user email="test@testemails.com"/>
</end-user-emails>

私が現在持っているコードのスニペット:

$result = $xml->xpath("end-user-emails/user[@email]");
print_r($result[0][email]);

どの出力:

SimpleXMLElement Object ( [0] => test@testemails.com ) 

単純に属性値を返す方法が見つかりません。
文字列にキャストしようとしましたが、エラーが発生しました。私はいくつかのバリエーションを試しました:

$result = $xml->end-user-emails[0]->user[0]->attributes();

そして、前の出力にもかかわらず、オブジェクトで呼び出されていないため、 attributes() を呼び出すことができないことがわかります。

したがって、xml から属性名と値の両方を取得する方法を誰かが教えてくれれば、非常にありがたいです。属性名は必須ではありませんが、実際にメールを取得していることを確認できるように使用したいと思います。

if attributeName = "email" then $email = attributevalue
4

2 に答える 2

2

メソッドはオブジェクトのattributes()ような配列を返すので、これはあなたが望むことをするはずですが、php 5.4+でのみ動作します

$str = '
<end-user-emails>
    <user email="test@testemails.com"/>
</end-user-emails>';
$xml = simplexml_load_string($str);
// grab users with email
$user = $xml->xpath('//end-user-emails/user[@email]');
// print the first one's email attribute
var_dump((string)$user[0]->attributes()['email']);

php5.3 を使用している場合は、次のように attributes() をループする必要があります。

foreach ($user[0]->attributes() as $attr_name => $attr_value) {
    if ($attr_name == 'email') {
        var_dump($attr_name, (string)$attr_value);
    }
}

戻り値を割り当てて、その変数->attributes()で使用することもできます。['email']ループは、事前に属性名がわからない場合にも役立ちます。

于 2013-04-03T20:13:32.283 に答える
1

ユーザーの電子メール アドレスを取得するには (この例では)、xml をオブジェクトに読み込み、各項目を解析します。これが役立つことを願っています。

//load the data into a simple xml object
$xml = simplexml_load_file($file, null, LIBXML_NOCDATA);
//parse over the data and manipulate
foreach ($xml->action as $item) {
    $email = $item->end-user-emails['email'];
    echo $email;

}//end for

詳細については、http://php.net/manual/en/function.simplexml-load-file.phpを参照してください。

于 2013-04-03T20:05:10.303 に答える