Có chức năng nào tạo chuỗi từ PHP SimpleXMLElement
không?
Câu trả lời:
Bạn có thể sử dụng SimpleXMLElement::asXML()
phương pháp để thực hiện điều này:
$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();
Trên thực tế asXML () chuyển đổi chuỗi thành xml như tên của nó:
<id>5</id>
Điều này sẽ hiển thị bình thường trên một trang web nhưng nó sẽ gây ra sự cố khi bạn khớp các giá trị với một thứ khác.
Bạn có thể sử dụng hàm strip_tags để nhận giá trị thực của trường như:
$newString = strip_tags($xml->asXML());
Tái bút: nếu bạn đang làm việc với số nguyên hoặc số thực, bạn cần chuyển nó thành số nguyên với intval () hoặc floatval () .
$newNumber = intval(strip_tags($xml->asXML()));
Bạn có thể sử dụng ->child
để lấy một phần tử con có tên là child .
Phần tử này sẽ chứa văn bản của phần tử con .
Nhưng nếu bạn thử var_dump()
trên biến đó, bạn sẽ thấy nó không thực sự là một chuỗi PHP.
Cách dễ nhất để giải quyết vấn đề này là thực hiện strval(xml->child);
Điều đó sẽ chuyển đổi nó thành một chuỗi PHP thực tế.
Điều này hữu ích khi gỡ lỗi khi lặp lại XML của bạn và sử dụng var_dump()
để kiểm tra kết quả.
Vì vậy $s = strval($xml->child);
.
Đây là một hàm tôi đã viết để giải quyết vấn đề này (giả sử thẻ không có thuộc tính). Hàm này sẽ giữ định dạng HTML trong nút:
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
Đôi khi bạn có thể gõ đơn giản:
// this is the value of my $xml
object(SimpleXMLElement)#10227 (1) {
[0]=>
string(2) "en"
}
$s = (string) $xml; // returns "en";
$xmlitem->description
. Cảm ơn.
Có thể tùy thuộc vào nguồn cấp dữ liệu XML mà bạn có thể / có thể không cần sử dụng __toString()
; Tôi đã phải sử dụng __toString()
nếu không, nó đang trả về chuỗi bên trong một SimpleXMLElement. Có lẽ tôi cần phải đi sâu vào đối tượng hơn nữa ...