2016-09-09 1 views
2

데이터베이스 테이블의 DOMDocument를 사용하여 XML을 만들려고합니다. 모든 필드 유형은 BLOB 유형을 제외한 XML 노드에 표시됩니다. 내가 무슨 짓을했는지 아래 :php DOMDocument blob 필드 (텍스트)의 createTextNode에 데이터가 표시되지 않습니다.

나는 또한 SimpleXMLElement으로 시도했지만 역시 실패
$rs = ibase_query("SELECT * FROM mytable"); 
$coln = ibase_num_fields($rs); 
$fieldnames = array(); 
for ($i = 0; $i < $coln; $i++) { 
    $col_info = ibase_field_info($rs, $i); 
    $fieldnames[] = array('name' => $col_info['name'], 'type' => $col_info['type']); 
} 

$doc = new DOMDocument('1.0'); 
$sth = ibase_query($dbh, $stmt); 
$doc->formatOutput = true; 
$root = $doc->createElement('FA_ARTIKEL'); 
$root = $doc->appendChild($root); 
while ($row = ibase_fetch_object($sth, IBASE_TEXT)) { 
    $title = $doc->createElement('RECORD'); 
    $title = $root->appendChild($title); 

    $text = $doc->createTextNode(''); 
    $text = $title->appendChild($text); 
    foreach ($fieldnames as $value) { 
     switch ($value['type']) { 
      case 'VARCHAR': 
       $rtitle = $doc->createElement($value['name']); 
       $rtitle = $title->appendChild($rtitle); 

       $rtext = $doc->createTextNode($row->$value['name']); 
       $rtext = $rtitle->appendChild($rtext); 
       break; 

      case 'BLOB': 
       $rbtitle = $doc->createElement($value['name']); 
       $rbtitle = $title->appendChild($rbtitle); 

       $rbtext = $doc->createTextNode($row->$value['name']); 
       $rbtext = $rbtitle->appendChild($rbtext); 
       break; 

      default: 
       if ($row->$value['name']) { 
        $rtitle = $doc->createElement($value['name']); 
        $rtitle = $title->appendChild($rtitle); 

        $rtext = $doc->createTextNode($row->$value['name']); 
        $rtext = $rtitle->appendChild($rtext); 
       } else { 
        $rtitle = $doc->createElement($value['name']); 
        $rtitle = $title->appendChild($rtitle); 

        $rtext = $doc->createTextNode('0'); 
        $rtext = $rtitle->appendChild($rtext); 
       } 
       break; 
     } 
    } 
} 

Header('Content-type: text/xml'); 
echo $doc->saveXML() . "\n"; 
ibase_free_result($sth); 
ibase_close($dbh); 

. 내가 누락 된 것? 내 데이터베이스 파이어 버드입니다

BLOB SUB_TYPE 1 SEGMENT SIZE 16384 

답변

0

PHPs있는 DOMDocument이 UTF-8 문자열을 기대로 나는 BLOB 필드를 설정합니다. BLOB에 제어 문자/잘못된 유니 코드 시퀀스가 ​​포함되어있을 수 있습니다. XML을 깨뜨린 데이터를 변수에 넣고 문제를 최소한으로 줄이십시오.

$blobData = $record['blobField']; 

$document = new DOMDocument(); 
$document 
    ->appendChild($document->createElement('foo')) 
    ->appendChild($document->createTextNode($blobData)); 

echo $document->saveXml(); 

BLOB 데이터가 정말 문제 또는 단순히 증상 인 경우 당신이 볼 수있는이 방법.

BLOB에 2 진 데이터가 들어 있으면이를 TEXT 형식으로 변환해야합니다. Atom은 삽입하려는 바이너리 데이터 (예 : urlencode)를 피드합니다. 여기에서 읽기 프로그램의 값을 디코딩해야합니다.