데이터베이스의 데이터를 XML 파일로 내보내는 도구를 사용하고 있습니다. XML 파일을 가져 와서 다양한 필터를 수행하고 유효성 검사 등을 수행 할 수있는 객체를 작성하고 두 번째 데이터베이스로 가져옵니다.php SimpleXMLElement 이상한 행동
XML 필드 이름을 키로, 데이터베이스 테이블 필드 이름을 값으로 포함하는 배열이 있습니다.
내 방법 중 하나는 각 레코드를 반복 한 다음 필드 이름 변환 배열을 반복하고 CodeIgniter insert_batch 문에서 사용할 배열을 작성합니다.
SimpleXMLElement 객체의 속성에 동적으로 액세스하는 것과 관련하여 이전에 경험하지 못한 이상한 문제가 있습니다.
이 내 현재 코드입니다 : 위의 코드 블록에서 5 행에
$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;
}
}
, 당신은 내가 모든 필드 이름 변환을 통해 살펴보고,하고 $ SQL 배열에 값을 삽입 할 수 있습니다. 당신이 볼 수 있듯이 $xml_field
값이 external_id
경우 내가 수행하는 경우
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]
, 다음
는echo $record->external_id;
이 성공적으로 외부 ID를 출력합니다. 그러나 이렇게하면 :
$xml_field = 'external_id';
echo $record->$xml_field;
빈 문자열이 생성됩니다. 사실, $record->xml_field
은 SimpleXMLElement 객체를 반환합니다.
내 질문
내가 동적 속성을 참조 할 때 왜 대신 속성 값의SimpleXMLElement
객체의 인스턴스를 반환
? 속성이 하드 코드 된 경우 잘 작동합니다.
추가 정보가 필요하면 알려 주시기 바랍니다. 내가 $record->$xml_element[0]
및 $record->{$xml_element}[0]
일을 시도했습니다
$xml_element = 'external_id';
var_dump($record->$xml_element);
// Outputs:
[external_id] => SimpleXMLElement Object
(
[0] => 0717d6d0-3ffb-427d-8870-890132191e7b
)
하지만 어느 작업은 예상대로 :
감사
편집 $record->$xml_element
를 호출 후 SimpleXMLElement 개체의 내용이 있습니다.
SimpleXMLElement의 속성을 참조하는 새로운 SimpleXMLElement에게
그리고 새 SimpleXMLElement의 내용은 무엇입니까? – Sugar
@ ClémentMalet 답장을 보내 주셔서 감사합니다. 아래쪽에있는 결과를 –
으로 업데이트했습니다.이 동작에 대해 잘 모르겠습니다. 이것을 시도해보십시오 :'echo (string) $ record -> $ xml_field;'? – Sugar