我有一个xml文件:
$xml = <<<EOD
<?xml version="1.0" encoding="utf-8"?>
<metaData xmlns="http://www.test.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="test">
<qkc6b1hh0k9>testdata&more</qkc6b1hh0k9>
</metaData>
EOD;
现在我将它加载到一个 simplexmlobject 中,稍后我想获取“qkc6b1hh0k9”-node 的内部
$xmlRootElem = simplexml_load_string( $xml );
$xmlRootElem->registerXPathNamespace( 'xmlns', "http://www.test.com/" );
// ...
$xPathElems = $xmlRootElem->xpath( './'."xmlns:qkc6b1hh0k9" );
$var = (string)($xPathElems[0]);
var_dump($var);
我希望得到字符串
testdata&more
...但我得到了
testdata&more
- 为什么 simplexmlobject 的 __toString() 方法将我的转义特殊字符转换为普通字符?我可以停用此行为吗?
我想出了一个临时解决方案,我认为它很脏,你说什么?
(strip_tags($xPathElems[0]->asXML()))
DOMDocument 可以替代吗?
感谢您对我的问题的任何帮助!
编辑
问题解决了,问题不在simplexml的__toString方法,是后来在addChild使用字符串的时候
如上所述的行为完全没问题,正如您在答案中看到的那样,必须预料到......
只有当通过“addChild”将该值添加到另一个 xml 文档时,才会出现问题。由于 addChild 不会转义与符号(http://www.php.net/manual/de/simplexmlelement.addchild.php#103587),因此必须手动进行。