SimpleXml을 문자열로


79

PHP에서 문자열을 만드는 함수가 SimpleXMLElement있습니까?


4
어떤 종류의 문자열을 원하십니까?
Shamim Hafiz

답변:


120

SimpleXMLElement::asXML()방법을 사용하여 수행 할 수 있습니다 .

$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);

// The entire XML tree as a string:
// "<element><child>Hello World</child></element>"
$xml->asXML();

// Just the child node as a string:
// "<child>Hello World</child>"
$xml->child->asXML();

19
$string = $xml->child->__toString();
Luke Snowden 2015 년

htmlspecialchars ($ xml-> asXML ())?
zloctb

1
하지만 당신은 태그를 남겼습니다. 태그를 원하지 않으면 어떻게해야합니까? 다른 답변이 문제 해결
앤드류

63

캐스팅을 사용할 수 있습니다.

<?php

$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);

$text = (string)$xml->child;

$ text는 'Hello World'가됩니다.


2
나를위한 작품은,에 감사 태그를 넣어하지 않기 때문에
앤드류

16

실제로 asXML ()은 이름이 말하는대로 문자열을 xml로 변환합니다.

<id>5</id>

이것은 웹 페이지에 정상적으로 표시되지만 값을 다른 것과 일치시킬 때 문제가 발생합니다.

strip_tags 함수를 사용하여 다음과 같이 필드의 실제 값을 얻을 수 있습니다.

$newString = strip_tags($xml->asXML());

추신 : 정수 또는 부동 숫자로 작업하는 경우 intval () 또는 floatval ()을 사용 하여 정수로 변환해야합니다 .

$newNumber = intval(strip_tags($xml->asXML()));

15

asXML방법을 다음과 같이 사용할 수 있습니다 .

<?php

// string to SimpleXMLElement
$xml = new SimpleXMLElement($string);

// make any changes.
....

// convert the SimpleXMLElement back to string.
$newString = $xml->asXML();
?>

9

을 사용 ->child하여 child라는 하위 요소를 가져올 수 있습니다 .

이 요소는 하위 요소 의 텍스트를 포함합니다 .

그러나 var_dump()해당 변수 를 시도 하면 실제로 PHP 문자열이 아님을 알 수 있습니다.

이 문제를 해결하는 가장 쉬운 방법은 strval(xml->child); That 을 수행 하여 실제 PHP 문자열로 변환하는 것입니다.

이것은 XML을 루핑 할 때 디버깅 var_dump()하고 결과를 확인하는 데 유용합니다 .

그래서 $s = strval($xml->child);.


4

다음은이 문제를 해결하기 위해 작성한 함수입니다 (태그에 속성이 없다고 가정). 이 함수는 노드에서 HTML 형식을 유지합니다.

function getAsXMLContent($xmlElement)
{
  $content=$xmlElement->asXML();

  $end=strpos($content,'>');
  if ($end!==false)
  {
    $tag=substr($content, 1, $end-1);

    return str_replace(array('<'.$tag.'>', '</'.$tag.'>'), '', $content);
  }
  else
    return '';
}


$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);

echo getAsXMLContent($xml->child); // prints Hello World

1

때로는 간단히 타입 캐스트 할 수 있습니다.

// this is the value of my $xml
object(SimpleXMLElement)#10227 (1) {
  [0]=>
  string(2) "en"
}

$s = (string) $xml; // returns "en";

2
이것은 RSS 피드의 설명 필드에 대해 얻을 수있는 종류의 개체입니다. 그것이 작동한다는 것은 직관에 반하는 것이지만 여기에 문자열을 넣은 유일한 해결책이었습니다 $xmlitem->description. 감사.
Henrik Erlandsson 2019 년

0

아마도 XML 피드에 따라 사용할 필요가 없을 수도 있습니다 __toString(). __toString()그렇지 않으면 SimpleXMLElement 내부의 문자열을 반환하는 것을 사용해야 했습니다. 객체를 더 드릴 다운해야 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.