我想将一些XML读入SimpleXMLElement,然后通过将元素转换为字符串将元素值用作字符串。对于每个SimpleXMLELement,我想在返回之前更改元素字符串。
,而不是在任何地方重复操作元素,我想在一个地方执行此操作。我的第一个想法是覆盖SimpleXMLElement__toString,但这似乎只是用print调用而不是通过使用(string)转换为字符串。
还有什么我应该压倒一切还是有更好的方法呢?
<?php
$string_xml = "<?xml version='1.0' encoding='UTF-8'?>
<foo>
<bar>baz</bar>
</foo>";
$xml = simplexml_load_string($string_xml, 'ToStringTest');
print "cast ";
$s = (string)$xml->bar;
print $s;
// "cast baz" is printed
print "\nprint ";
print $xml->bar;
// "print uses __toStringbazfoo" is printed
class ToStringTest extends SimpleXMLElement
{
public function __toString()
{
print "uses __toString";
return parent::__toString() . 'foo';
}
}
答案 0 :(得分:-1)
您是否尝试过交换类定义和使用simplexml_load_string?
<?php
$string_xml = "<?xml version='1.0' encoding='UTF-8'?>
<foo>
<bar>baz</bar>
</foo>";
class ToStringTest extends SimpleXMLElement
{
public function __toString()
{
print "uses __toString";
return parent::__toString() . 'foo';
}
}
$xml = simplexml_load_string($string_xml, 'ToStringTest');
print "cast ";
$s = (string)$xml->bar;
print $s;
// "cast baz" is printed
print "\nprint ";
print $xml->bar;
// "print uses __toStringbazfoo" is printed
当你调用“simplexml_load_string”然后没有可用于覆盖__toString()的函数时,你可能会遇到类ToStringTest没有定义的问题,并且程序坚持使用基类中的已知定义。
因为除了类继承之外,PHP不能重载函数,所以它很可能在这里工作,并且如果你的类存在,它并不真正照顾,但当然结果是不同的。