簡體   English   中英

PHP SimpleXMLElement怪異行為

[英]php SimpleXMLElement weird behaviour

我正在使用將數據從數據庫導出到XML文件的工具。 我正在編寫一個對象,該對象可以獲取XML文件,對其執行各種過濾器,驗證等,然后將其導入第二個數據庫。

我有一個數組,其中包含XML字段名稱作為鍵,而數據庫表字段名稱作為值。

我的方法之一遍歷每條記錄,然后遍歷字段名轉換的數組,並構建要在CodeIgniter insert_batch語句中使用的數組。

關於動態地從SimpleXMLElement對象訪問屬性,我有一個以前從未遇到過的怪異問題。

這是我當前的代碼:

    $sql = array();
    foreach($this->current_file as $c => $record){
        $sql[$c] = array();

        foreach($this->schema['tables'][$this->current_file_name]['pairing'] as $sql_field => $xml_field){
            $sql[$c][$sql_field] = $record->$xml_field;
        }
    }

在上面的代碼塊的第5行,您可以看到我瀏覽了所有字段名稱的轉換,並將值插入$ sql數組。

XML field (echo $xml_field):                  external_id
SQL field (echo $sql_field):                  global_user_id
External ID (echo $record->external_id):      0717d6d0-3ffb-427d-8870-890132191e7b
Dynamic XML field (echo $record->$xml_field): 

Dump of $record:
    object(SimpleXMLElement)[29]
      public 'external_id' => string '0717d6d0-3ffb-427d-8870-890132191e7b' (length=36)
      public 'teacher' => string 'T' (length=1)
      public 'username' => string 'jdoe' (length=9)
      public 'ChosenName' => string 'John' (length=8)
      public 'Surname' => string 'Doe' (length=8)
      public 'Title' => string 'mr' (length=2)
      public 'Gender' => string 'male' (length=4)

Dump of $record->$xml_field ($record->external_id):
    object(SimpleXMLElement)[30]

如您所見,如果我執行以下操作,則$xml_field值是否為external_id

echo $record->external_id;

它成功輸出了外部ID。 但是,如果我這樣做:

$xml_field = 'external_id';
echo $record->$xml_field;

它產生一個空字符串。 實際上, $record->xml_field返回一個SimpleXMLElement對象。

我的問題

為什么當我動態引用屬性時,它返回SimpleXMLElement對象的實例而不是屬性值? 對該屬性進行硬編碼時,它可以正常工作。

如果您需要任何其他信息,請告訴我。

謝謝

編輯在調用$record->$xml_element之后,SimpleXMLElement對象的內容是這樣的:

$xml_element = 'external_id';
var_dump($record->$xml_element);

// Outputs:
[external_id] => SimpleXMLElement Object
    (
        [0] => 0717d6d0-3ffb-427d-8870-890132191e7b
    )

我嘗試做$record->$xml_element[0]$record->{$xml_element}[0] ,但是都沒有按預期工作。

就像引用SimpleXMLElement的屬性會生成一個新的SimpleXMLElement

我認為這與如何填充“ $ xml_field”有關,當您嘗試從xml對象獲取數據時,有時應該使用類型轉換。

$x = (string)$xml->blablaField;

否則可能會返回對象。 看來您的$ xml_field不是字符串。 這就是為什么您從“ $ record-> $ xml_element”獲取對象的原因

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM