gpt4 book ai didi

php - 将 DOMNodes 从一个 DOMDocument 复制到另一个

转载 作者:行者123 更新时间:2023-12-05 01:03:21 26 4
gpt4 key购买 nike

我一直在尝试像这样合并两个 XML 文档:

$def  = new DOMDocument( '1.0' );
$rdef = new DOMDocument( '1.0' );
$def->load( $path );
$rdef->loadXML( $info );
$r = $def->getElementsByTagName( 'repository' )->item( 0 );
$s = $rdef->getElementsByTagName( 'repository' )->item( 0 );
try {
$r->appendChild( $s );
}
catch ( DOMException $e ) {
SPConfig::debOut( get_class( $s ) );
SPConfig::debOut( $e->getMessage() );
}

结果是:

DOMElement
Wrong Document Error

所以在我看来 $rdef->getElementsByTagName( 'repository' )->item( 0 ) 返回 DOMElement 对象,但 definition说它应该是 DOMNode 对象。

知道这有什么问题吗?

最佳答案

这并没有错。 DOMNodeList 可以保存任何 DOMNode 实例或其子类。 DOMElement 扩展了 DOMNode,所以从技术上讲,一个 DOMElement 也是一个 DOMNode。 DOMAttr 也一样。

编辑:问题是您试图复制到其他 DOMDocument。你必须 importNode先将节点添加到 Document 中,然后再添加它。

EDIT2:请试试这个:

$r = $def->getElementsByTagName( 'repository' )->item( 0 );
$s = $rdef->getElementsByTagName( 'repository' )->item( 0 );
$i = $def->importNode( $s, TRUE );
$r->appendChild( $i , TRUE );

EDIT3:完整示例

$srcXML = <<< XML
<repositories>
<repository>
<element>foo</element>
</repository>
</repositories>
XML;

$destXML = <<< XML
<repositories>
<repository>
<element>bar</element>
</repository>
</repositories>
XML;

$srcDoc = new DOMDocument;
$destDoc = new DOMDocument;
$destDoc->formatOutput = TRUE;
$destDoc->preserveWhiteSpace = FALSE;

$srcDoc->loadXML( $srcXML );
$destDoc->loadXML( $destXML );

$destNode = $destDoc->getElementsByTagName('repository')->item( 0 );
$srcNode = $srcDoc->getElementsByTagName('repository')->item( 0 );
$import = $destDoc->importNode($srcNode, TRUE);
$destNode->parentNode->appendChild($import);
echo $destDoc->saveXML();

给予

<?xml version="1.0"?>
<repositories>
<repository>
<element>bar</element>
</repository>
<repository>
<element>foo</element>
</repository>
</repositories>

关于php - 将 DOMNodes 从一个 DOMDocument 复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3091287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com