我有一个XMLFILE:投的SimpleXMLElement串得到内的内容,但保留的htmlspecialchars逃脱
$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()方法,把我的逃跑specialChars中正常字符?我可以停用这种行为吗?
我想出了一个临时解决方案,我认为它很脏,你说什么?
(用strip_tags($ xPathElems [0] - > asXML()))
可能DOM文档是一种替代?
感谢您对我的问题提供任何帮助!
编辑
问题解决了,问题并不SimpleXML中的__toString方法,它以后被使用上面是完全以细描述,并且具有以与的addChild
行为字符串时上因为你可以在答案中看到...
只有在通过“addChild”将该值添加到另一个xml文档时才会出现问题。 由于addChild不会跳过&符号(http://www.php.net/manual/de/simplexmlelement.addchild.php#103587),所以必须手动执行此操作。
情况就是这样......数据被放回到另一个xml文档中。但另一个xmldocument中的节点只以“testdata”结束。任何从&符号和之后被剪切 - addChild例如不转换&符号(http://www.php.net/manual/de/simplexmlelement.addchild.php#103587) – Preexo
啊,所以问题不是与'__toString'完全相同,但在目标文档上使用'addChild'。 *任何*数据源可能会给你一个&符号并导致同样的问题。 – IMSoP
耶!似乎他们错过了用“addChild”逃避&符......甚至可能是一个bug ......? – Preexo