PHP simpleXML 형식화 된 방식으로 파일을 저장하는 방법은 무엇입니까?


88

PHP의 SimpleXML을 사용하여 기존 XML 파일에 일부 데이터를 추가하려고합니다. 문제는 모든 데이터를 한 줄에 추가한다는 것입니다.

<name>blah</name><class>blah</class><area>blah</area> ...

등등. 모두 한 줄에. 줄 바꿈을 도입하는 방법은 무엇입니까?

이렇게 만들려면 어떻게해야하나요?

<name>blah</name>
<class>blah</class>
<area>blah</area>

asXML()기능을 사용하고 있습니다.

감사.


PEAR XML_Beautifier 패키지도 있습니다.
karim79

답변:


148

DOMDocument 클래스 를 사용 하여 코드 형식을 변경할 수 있습니다.

$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
echo $dom->saveXML();

감사합니다. 간단하고 효율적입니다.
Andrei Duma 2013

3
그렇다면 SimpleXML로는 불가능합니까?
Jonathan

@ xcy7e 아니요, 그렇게 생각하지 않습니다.
Gumbo 2014

1
파일에 추가하는 콘텐츠의 형식을 지정하려고 할 때 기존 콘텐츠를로드하기 전에 preserveWhiteSpace 및 formatOutput을 지정한 경우에만 작동했습니다.
Sam

30

Gumbo의 솔루션이 트릭을 수행합니다. 위의 simpleXml로 작업 한 다음 끝에 이것을 추가하여 에코 및 / 또는 서식으로 저장할 수 있습니다.

아래 코드는이를 에코하고 파일에 저장합니다 (코드의 주석을 확인하고 원하지 않는 것은 제거하십시오).

//Format XML to save indented tree rather than one line
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
//Echo XML - remove this and following line if echo not desired
echo $dom->saveXML();
//Save XML to file - remove this and following line if save not desired
$dom->save('fileName.xml');

19

dom_import_simplexmlDomElement로 변환하는 데 사용 합니다. 그런 다음 용량을 사용하여 출력을 포맷합니다.

$dom = dom_import_simplexml($simple_xml)->ownerDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
echo $dom->saveXML();

작동하지 않습니다. 함수 리턴한다 DOMElement 아닌 DOMDocument를
karka91

보인다 documentElement해야한다 ownerDocument. API가 변경되었는지 또는 이것은 오타인지 확실하지 않습니다. 지금 수정했습니다.
troelskn 2012 년

3
이 작업은 여전히 ​​작동하지 않습니다. preserveWhiteSpace 및 formatOutput은 문서를 가져 오기 전에 설정해야합니다. :)
karka91

흥미 롭습니다-맞습니다. Gumbo의 답변이 작동하는 것 같습니다.
troelskn

2

GumboWitman이 대답 했듯이 ; DOMDocument :: loadDOMDocument :: save 를 사용하여 기존 파일에서 XML 문서를로드하고 저장합니다 (여기에는 많은 초보자가 있습니다) .

<?php
$xmlFile = 'filename.xml';
if( !file_exists($xmlFile) ) die('Missing file: ' . $xmlFile);
else
{
  $dom = new DOMDocument('1.0');
  $dom->preserveWhiteSpace = false;
  $dom->formatOutput = true;
  $dl = @$dom->load($xmlFile); // remove error control operator (@) to print any error message generated while loading.
  if ( !$dl ) die('Error while parsing the document: ' . $xmlFile);
  echo $dom->save($xmlFile);
}
?>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.