我正在使用一個工具,它將數據從一個數據庫導出到一個XML文件。我正在寫一個對象,它可以接受XML文件,執行各種過濾器,驗證等等,並將它導入第二個數據庫。php SimpleXMLElement奇怪的行爲
我有一個數組,它包含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;
它會產生一個空字符串。 Infact,$record->xml_field
返回一個SimpleXMLElement對象。
我的問題
爲什麼當我引用動態屬性它返回SimpleXMLElement
對象,而不是屬性值的實例?當屬性被硬編碼時,它工作正常。
如果您需要任何額外的信息,請讓我知道。
感謝
編輯 的SimpleXMLElement對象的內容,稱$record->$xml_element
後是這樣的:
$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
那個新的SimpleXMLElement的內容是什麼? – Sugar 2014-09-01 11:00:07
@ClémentMalet感謝您的回覆,我已經在底部更新了我的問題,結果爲 – 2014-09-01 11:07:11
我不知道這種行爲,你可以試試這個:echo(string)$ record - > $ xml_field;'? – Sugar 2014-09-01 11:14:01