2014-02-23 5 views
0

간단한 PHP XML 예제를 다음과 같이 시도하고 있습니다. 나는 앞으로 그 중 일부 공백을 추가하여 히어 닥 스타일의 문자열의 첫 번째 라인을 포맷 할 때 heredoc 스타일 문자열 매개 변수를 사용할 때 simplexml_load_string 오류가 발생했습니다.

// code of PHP 
=================================================== 
<?php 
    $string = <<<XML 
<?xml version="1.0" encoding="ISO-8859-1"?> 
<note> 
<to>George</to> 
<from>John</from> 
<heading>Reminder</heading> 
<body>Don't forget the meeting!</body> 
</note> 
XML; 

    print "BEGIN</br>"; 
    print "String:</br>{$string}"; 

    $xml = simplexml_load_string($string); 
    print "</br>XML Obj:</br>"; 
    print_r($xml); 
    print "</br>Var Dump:</br>"; 
    var_dump($xml); 
    print "</br>END"; 
?> 
=================================================== 

및 출력은 라인 <?xml version="1.0" encoding="ISO-8859-1"?>를 수행하기 전에 두 개의 공백을 추가, OK

// output 
=================================================== 
BEGIN 
String: 
George John Reminder Don't forget the meeting! 
XML Obj: 
SimpleXMLElement Object ([to] => George [from] => John [heading] => Reminder [body] => Don't forget the meeting!) 
Var Dump: 
object(SimpleXMLElement)#1 (4) { ["to"]=> string(6) "George" ["from"]=> string(4) "John" ["heading"]=> string(8) "Reminder" ["body"]=> string(25) "Don't forget the meeting!" } 
END 
=================================================== 

동안 보인다 항상 $ xml Object 정보를 출력하지 못했습니다.

누군가 나를 도울 수 있기를 바랍니다 !!! 대단히 감사합니다.

+2

프롤로그 앞에 공백을 넣지 마십시오. 왜 그렇게하기를 원하십니까? – Wrikken

+1

+1, 또는 $ xml = simplexml_load_string (trim ($ string))을 사용하십시오. – sinisake

+0

약간의 추함 때문에 도움을 주셔서 감사합니다. 그래서 형식을 지정하려고합니다. 글쎄, 문자열 컨텐트에 대한 요구 사항을 찾지 못했지만 heredoc 스타일 문자열의 레이블을 끝내는 몇 가지 지침이있는 것 같습니다. 문자열 내용을 형식화 한 후에는 항상 실패하고 여러 번 시도한 후에 문자열 내용의 첫 번째 줄이 결과에 영향을 미치기 전에 비어있는 부분 만 찾습니다. 그래서 궁금해서 질문을 게시합니다. –

답변

1

유효한 XML이 아닙니다. 다른 문법은 XML 문서가 prolog로 시작,에서 만들 수 있습니다 토큰 무엇

document ::=  prolog element Misc* 
prolog  ::=  XMLDecl? Misc* (doctypedecl Misc*)? 
XMLDecl  ::=  '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' 

document 기록 하였 다 : a를 XML specs for documents에서 보라. 이 XMLDecl을 포함하며, 다시 <?xml으로 시작합니다. 즉, 선언 앞에 공백이 있으면 허용되지 않습니다.


당신은 XML (당신은 것 같다있는)의 제어하에있는 경우 : 그냥 그렇게하지 않습니다, 나는 모두가 궁금합니다 후 코드를 처리하는 것으로 악성이 간주 것 무슨 일이야. 다른 사람이 깨진 XML 파일을 전송하기 때문에 당신이 입력을 변경할 수없는 경우

:

  • 이미 제안처럼 잘 구성된 XML 또는
  • "사전 처리"trim($string)와 비 XML을 제공하라고 의견에.
+0

도움을 주신 Jens Erat에게 감사드립니다. XML 사양을 자세히 확인하겠습니다. –