Czy jest jakaś funkcja, która tworzy ciąg znaków z PHP SimpleXMLElement
?
Odpowiedzi:
Możesz użyć tej SimpleXMLElement::asXML()
metody, aby to osiągnąć:
$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();
$string = $xml->child->__toString();
Właściwie asXML () konwertuje ciąg znaków na xml zgodnie z jego nazwą:
<id>5</id>
Będzie to wyświetlane normalnie na stronie internetowej, ale spowoduje problemy podczas dopasowywania wartości z czymś innym.
Możesz użyć funkcji strip_tags, aby uzyskać rzeczywistą wartość pola, taką jak:
$newString = strip_tags($xml->asXML());
PS: jeśli pracujesz z liczbami całkowitymi lub liczbami zmiennoprzecinkowymi, musisz przekonwertować je na liczby całkowite za pomocą intval () lub floatval () .
$newNumber = intval(strip_tags($xml->asXML()));
Możesz użyć, ->child
aby pobrać element podrzędny o nazwie child .
Ten element będzie zawierał tekst elementu podrzędnego .
Ale jeśli spróbujesz var_dump()
tej zmiennej, zobaczysz, że w rzeczywistości nie jest to ciąg PHP.
Najłatwiejszym sposobem obejścia tego jest wykonanie polecenia strval(xml->child);
That przekonwertuje go na rzeczywisty ciąg PHP.
Jest to przydatne podczas debugowania podczas zapętlania kodu XML i używania var_dump()
do sprawdzania wyniku.
A więc $s = strval($xml->child);
.
Oto funkcja, którą napisałem, aby rozwiązać ten problem (zakładając, że tag nie ma atrybutów). Ta funkcja zachowa formatowanie HTML w węźle:
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
Czasami możesz po prostu napisać:
// this is the value of my $xml
object(SimpleXMLElement)#10227 (1) {
[0]=>
string(2) "en"
}
$s = (string) $xml; // returns "en";
$xmlitem->description
. Dzięki.
Prawdopodobnie w zależności od źródła XML, którego możesz / nie musisz używać __toString()
; Musiałem użyć, w __toString()
przeciwnym razie zwraca ciąg wewnątrz elementu SimpleXMLElement. Może potrzebuję dokładniej przeanalizować obiekt ...