2012-08-30 2 views
1

저는 XML 파일을 조작하기위한 PHP 응용 프로그램을 작성하고 있습니다. 변환을 위해 Perl XML serializer/unserializer를 시도했습니다 XML-> php obj-> json for manipulation 그런 다음 json을 xml로 다시 변환하여 인쇄하십시오. 여기 XML 조작

<module name="AssignId" active="true" description="user description"> 
    <dict name="params"> 
    <entry key="Adds"> 
    ... 
    </entry> 
    </dict> 
</module> 

이 같은 JSON 모양으로 변환 된 원본 XML의 샘플입니다

{"name":"AssignId","active":"true","description":"add draggable class to figure","dict":{"name":"params","entry":[{"key":"Adds" ... 
}} 

및 최종 결과 XML은 다음과 같습니다 : 여기

<name>AssignId</name> 
    <active>true</active> 
    <description>add draggable class to figure</description> 
    <dict> 
     <name>params</name> 
     <entry> 
      <XML_Serializer_Tag> 
       <key>Adds</key> 
        ... 
      </XML_Serializer_Tag> 
     </entry> 
    </dict> 
</name> 

내 2 클래스입니다

class JSON_toXML { 

    var  $jsonObj, 
      $phpObj, 
      $serializer; 

    public function __construct($options, $file_path) { 
     $this->serializer = new XML_Serializer($options); 
     $serializedDoc = $this->serializer->serialize(json_decode($file_path)); 
     if ($serializedDoc === true) { 
      $this->jsonObj = $this->serializer->getSerializedData(); 
     } else { 
      $this->jsonObj = NULL; 
     } 
    } 
    public function print_obj() { 
     echo "<pre>"; 
     echo($this->jsonObj); 
     echo "</pre>"; 
    } 
} 


class XML_toJSON { 

     var  $phpObj, 
       $jsonObj, 
       $unserializer; 

     public function __construct($options, $file_path) { 

      $this->unserializer = &new XML_Unserializer($options); 
      $unserializedDoc = $this->unserializer->unserialize($file_path, true); 
      $this->phpObj = $this->unserializer->getUnserializedData(); 
      $this->jsonObj = json_encode($this->phpObj); 
     } 

     public function print_phpObj() { 
      echo "<pre>"; 
      print_r($this->phpObj); 
      echo "</pre>"; 
     } 

     public function get_phpObj() { 
      return $this->phpObj; 
     } 

     public function print_jsonObj() { 
      echo $this->jsonObj; 
     } 

     public function get_jsonObj() { 
      return $this->jsonObj; 
     } 

    } 

최종 결과 XML을 원본과 동일한 형식으로 유지하는 방법을 궁금하십니까? 어쩌면 더 좋은 방법이 있을까요? 감사합니다 !!!

+0

"가운데"코드의 JSON을 확인하고 올바른지 확인하십시오. – Malachi

답변

2

속성과 요소를 구분할 수 있어야하지만 형식은 해당 정보를 전달하지 않습니다. 형식을 변경하여 다음과 같이 시작해야합니다.

{ 
    "element": "module", 
    "attribs": { 
     "name":  "AssignId", 
     "active":  "true", 
     "description": "add draggable class to figure" 
    }, 
    "children": [ 
     { 
     "element": "dict", 
     "attribs": { 
      "name": "params" 
     }, 
     "children:" [ 
      ... 
     ] 
     } 
    ] 
} 
+0

XML_unerializer가 json_encode()를 통해 XML에서 Json으로이 것을 구문 분석하는 방법을 제어 할 수 없기 때문에 아마도 도움이되지 않을 것입니다. 아마도 파서를 직접 작성 하시겠습니까? –