Help us understand the problem. What is going on with this article?

[PHP] XMLを解析する SimpleXMLElement の使い方

環境:PHP Version 7.4.9

XML文字列の読込

$xmlString = <<<EOM
    <hoge>
        <moge></moge>
    </hoge>
EOM;
$xml = simplexml_load_string($xmlString);

simplexml_load_string() でXML文字列を読み込める。
パラメータにはXML文字列を指定する。

XMLファイルの読込

$xml = simplexml_load_file($xmlFilePath);

simplexml_load_file() でXMLファイルを読み込める。
パラメータにはXMLファイルのパスを指定する。

子ノードへのアクセス

$xmlString = <<<EOM
    <hoge>
        <moge></moge>
    </hoge>
EOM;
$xml = simplexml_load_string($xmlString);
$child = $xml->moge;

アロー演算子でアクセスできる。

プロパティへのアクセス

$xmlString = <<<EOM
    <hoge PropA="1" PropB="2">
    </hoge>
EOM;
$xml = simplexml_load_string($xmlString);
$propA = (string) $xml->attributes()->PropA;
$propB = (string) $xml->attributes()->PropB;

attributes() で属性一覧を取得したあと、アロー演算子でアクセスする。
また、そのままでは値として扱いにくいので string へのキャストも併せて行う。

ノード名の取得

$xmlString = <<<EOM
    <hoge>
    </hoge>
EOM;
$xml = simplexml_load_string($xmlString);
$name = $xml->getName();

getName() で名前を取得できる。
今回の例なら「hoge」が取得できる。

全ての子ノードを取得してループ

$xmlString = <<<EOM
    <hoge>
        <moge></moge>
        <moge></moge>
        <moge></moge>
        <sage></sage>
        <sage></sage>
    </hoge>
EOM;
$xml = simplexml_load_string($xmlString);
$children = $xml->children();
foreach ($children as $val) {
   // 何らかの処理
}

children() で全ての子ノードを取得できる。

特定の子ノードを取得してループ

$xmlString = <<<EOM
    <hoge>
        <moge></moge>
        <moge></moge>
        <moge></moge>
        <sage></sage>
        <sage></sage>
    </hoge>
EOM;
$xml = simplexml_load_string($xmlString);
foreach ($xml->moge as $val) {
   // mogeのみに何らかの処理
}

アロー演算子を用いて特定の子ノードに対してのみループを行える。

JSONへの変換

$xmlString = <<<EOM
    <hoge>
        <moge></moge>
        <moge></moge>
        <moge></moge>
        <sage></sage>
        <sage></sage>
    </hoge>
EOM;
$xml = simplexml_load_string($xmlString);
$json = json_encode($xml);
foreach ($json as $val) {
   // 何らかの処理
}

json_encode() でJSON形式への変換ができる。




以上。

kintoreshiro
純喫茶が好き。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away