0

API を介してデータを取得していますが、次の形式で XML を返しています。

<SUBSCRIBER_ROW>
<SUBSCRIBER>
    <ACCOUNT_NUMBER Value="0123456789123"/>
    <FIRST_NAME Value="fakeFirstName         "/>
    <INITIAL Value="w "/>
    <SURNAME Value="fakeLastName        "/>
    <TELEPHONE_NUMBER Value="5551234"/>
    <TELEPHONE_AREA Value="403"/>

データを引き出すために必要なコードは次のとおりです。

   protected function par_getSubscriber($webCBSXML, $isJSON = false){
  ////parse XML
    $msg = 'WebCBS ERR: ';
    $dom = new DOMDocument();
    if(@$dom->loadXML($webCBSXML)) {
        $errors = $dom->getElementsByTagName('Error');
        if($parsedData = self::checkError($dom)) {
            $parsedData = self::formatOutput($parsedData, $isJSON, true);
            return $parsedData;
        } else {
            $subscriber['account_number']      = $dom->getElementsByTagName('account_number')->getAttribute('Value');
            $subscriber['first_name']          = $dom->getElementsByTagName('first_name')->getAttribute('Value');
            $subscriber['surname']             = $dom->getElementsByTagName('surname')->getAttribute('Value');
            $subscriber['telephone_number']    = $dom->getElementsByTagName('telephone_number')->getAttribute('Value');

ただし、スクリプト全体は次の行の直後に終了します。

$subscriber['account_number']      = $dom->getElementsByTagName('account_number')->getAttribute('Value');

私は DOM ドキュメントを扱った経験があまりなく、XML からオブジェクトを作成しているため、var_dump/print_r を使用してその構造を確認することができません!

4

1 に答える 1

1

XPath を使用して必要な情報を抽出することをお勧めしますが、 の戻り値を誤解しているようですgetElementsByTagName()。単一のノードではなく、DOMNodeList を返します。また、@salathe が述べたように、ノード名を大文字にする必要があります。コードを次のように変更します。

$subscriber['account_number'] =
    $dom->getElementsByTagName('ACCOUNT_NUMBER')->item(0)->getAttribute('Value');

また、ノードが XML に実際に存在することを確認する必要があります。PHP でチェックを作成することも、XSD などのスキーマ言語を使用することもできます。

于 2013-01-07T23:41:25.843 に答える