simplexml_import_dom():要导入的节点类型无效 - 支持哪些DOMNode子类型?

时间:2014-06-25 21:57:18

标签: php xml simplexml

当传递的simplexml_import_dom()不是兼容的子类型时,DOMNode函数会不时给出以下错误:

  

simplexml_import_dom():要导入的节点类型无效

所以我想知道哪些DOMNode类型有效导入?

1 个答案:

答案 0 :(得分:1)

首先,您通过DOMNode导入的simplexml_import_dom必须与文档相关联。这与它的DOMNode子类型无关,没有文档的节点将被拒绝:

  

simplexml_import_dom():导入的节点必须具有关联的文档

接下来,导入的节点必须是DOMElement类型。

这两个是唯一的要求(见source)。

摘要:您可以将任何DOMElement ownerDocument导入simplexml。

如果您需要导入没有文档的DOMNode,请创建一个并导入它。

/** @var XMLReader $reader */
$node = $reader->expand();

if (!$node instanceof DOMElement) {
    throw new UnexpectedValueException(
        sprintf('Expected DOMElement, %s given.', get_class($node))
    );
}

$doc  = new DomDocument();
$node = $doc->importNode($node, true);

$sxnl = simplexml_import_dom($node);

如果节点不是DOMElement那么解决问题就更难处理了,具体取决于你需要什么,没有简单的回退,就像在simplexml中没有简单的回归一样那一点。

要找出SimpleXMLElement表示的节点类型,请参阅: