2014-03-01 1 views
0

XML 파일에 simpleXML로 쓰려고 시도한 결과 값이 "<test>asd</test>" 인 문자열을 작성하려고했습니다. 전체 giberrish로 바뀌 었습니다 (인코딩 형식과 관련이 있음을 알고 있습니다. 하지만이 문제를 해결하는 솔루션을 모른다, 나는 encoding="UTF-8"로 전환 시도하지만 여전히XML 파일에 태그가 포함 된 문자열을 giberrish로 변환합니다.

내 XML 파일) 비슷한 결과를 얻을 :

<?xml version="1.0"?> 
<userinfos> 
<userinfo> 
    <account> 
     <user>TIGERBOY-PC</user> 
     <toDump>2014-02-04 22:17:22</toDump> 
     <nextToDump>2014-02-05 00:17:22</nextToDump> 
     <lastChecked>2014-02-04 16:17:22</lastChecked> 
     <isActive>0</isActive> 
     <upTime>2014-02-04 16:17:22</upTime> 
     <toDumpDone>1</toDumpDone> 
     <systemInfo>&lt;test&gt;asd&lt;/test&gt;</systemInfo> 
    </account> 
    <account> 
     <user>TIGERBOY-PCV</user> 
     <toDump>2014-02-04 22:17:22</toDump> 
     <nextToDump>2014-02-05 00:17:22</nextToDump> 
     <lastChecked>2014-02-04 16:17:22</lastChecked> 
     <isActive>1</isActive> 
     <upTime>2014-02-04 16:17:22</upTime> 
     <toDumpDone>1</toDumpDone> 
    </account> 
</userinfo> 
</userinfos> 

내 PHP 파일 :

<?php 

    //Start of Functions 
    function changeAgentInfo() 
    { 

     $userorig = $_POST['user']; 

     $userinfos = simplexml_load_file('userInfo.xml'); // Opens the user XML file 
     $flag = false; 

     foreach ($userinfos->userinfo->account as $account) 
     {  

      // Checks if the user in this iteration of the loop is the same as $userorig (the user i want to find) 
      if($account->user == $userorig) 
      { 
       $flag = true; // Flag that user is found 

       $meow = "<test>asd</test>"; 
       $account->addChild('systemInfo',$meow); 
      } 
     } 

     $userinfos->saveXML('userInfo.xml'); 

     echo "Success"; 
    } 
    //End of Functions 

    // Start of Program 
    changeAgentInfo(); 


?> 

감사합니다. 좋은 하루 되세요 =)

+0

로 변경해야이 PHP에서 파일] (http://stackoverflow.com/q/22112453/367456) -이 답변이 이미 있으므로 더 이상 필요하지 않으면 이전 하나를 삭제하십시오. – hakre

답변

2

이것은 횡설수설하지 않습니다. < (&lt;) 및 > (&gt;)의 경우 간단히 XML entities입니다. SimpleXML을 중첩 된 XML 요소를 추가하려면 다음을 수행 할 수 있습니다

$node = $account->addChild('systemInfo'); 
$node->addChild('test', 'asd'); 

먼저 우리가 add a node<account>에, 그 새로 만든 노드에 아이를 추가하는 것을 볼 수 있습니다.

당신이 <systemInfo> 요소에 여러 자녀를 추가 할 계획이라면, 당신은 아마 다음 작업을 수행 할 수 있습니다 :

$items = array(
    'os' => 'Windows 7', 
    'ram' => '8GB', 
    'browser' => 'Google Chrome' 
); 
$node = $account->addChild('systemInfo'); 
foreach ($items as $key => $value) { 
    $node->addChild($key, $value); 
} 
+0

안녕하세요,이 코드로 여러 개의 중첩 된 요소가있는 문자열을 계획 했으므로 문자열을 파싱하고 무거운 읽기를 수행하고 해당 문자열에 쓰고 여러 자식을 만드는 대신 빠른 방법을 사용합니다. ? 응답 =) 응답 해 주셔서 감사합니다.) – Fukkatsu

+1

@ SaggerAl-Saadi : 가능한 해결책은 편집 된 답변을 참조하십시오. –

+0

thanks man =) 이것은 두 개의 XML로드 (문자열과 파일에 대해 각각 하나씩)를 다르게 구현했지만 나에게 구현하기위한 새로운 아이디어를주었습니다. – Fukkatsu

0

addChild function는 XML 노드에 자식 요소를 추가하는 데 사용됩니다. 텍스트 대신 xml을 추가하려고합니다. 반복 된 XML로 요소의 문자열을 추가하는 [오류 :

당신은

$meow = "<test>asd</test>"; 
$account->addChild('systemInfo',$meow); 

당신은 대신 이전을 편집, 자신의 질문을 중복하지 마십시오

$account->addChild('systemInfo','my system info text');