【发布时间】:2013-04-18 11:05:28
【问题描述】:
我有一个 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),因此必须手动完成。
【问题讨论】:
标签: php xml simplexml htmlspecialchars object-to-string