DOMノードのrootのタグ名のみを変更するにはどうすればよいですか?
documentElement
DOM-Documentモデルでは、オブジェクトのプロパティを変更できないDOMElement
ため、ノードを「再構築」する必要があります...しかし、childNodes
プロパティを使用して「再構築」するにはどうすればよいでしょうか。
注:これは、saveXMLを使用して文字列に変換し、正規表現でルートを切断することで実行できます...ただし、これは回避策であり、DOMソリューションではありません。
試しましたが動作しません、PHPの例
PHPの例(機能しませんが、なぜですか?):
試してください-1
// DOMElement::documentElement can not be changed, so...
function DomElement_renameRoot1($ele,$ROOTAG='newRoot') {
if (gettype($ele)=='object' && $ele->nodeType==XML_ELEMENT_NODE) {
$doc = new DOMDocument();
$eaux = $doc->createElement($ROOTAG); // DOMElement
foreach ($ele->childNodes as $node)
if ($node->nodeType == 1) // DOMElement
$eaux->appendChild($node); // error!
elseif ($node->nodeType == 3) // DOMText
$eaux->appendChild($node); // error!
return $eaux;
} else
die("ERROR: invalid DOM object as input");
}
エラーのappendChild($node)
原因:
Fatal error: Uncaught exception 'DOMException'
with message 'Wrong Document Error'
試してください-2
@canの提案(リンクを指すだけ)と貧弱なdom-domdocument-renamenodeマニュアルの私の解釈から。
function DomElement_renameRoot2($ele,$ROOTAG='newRoot') {
$ele->ownerDocument->renameNode($ele,null,"h1");
return $ele;
}
renameNode()メソッドによりエラーが発生しました。
Warning: DOMDocument::renameNode(): Not yet implemented
試してみてください-3
PHPマニュアルから、コメント1。
function renameNode(DOMElement $node, $newName)
{
$newNode = $node->ownerDocument->createElement($newName);
foreach ($node->attributes as $attribute)
$newNode->setAttribute($attribute->nodeName, $attribute->nodeValue);
while ($node->firstChild)
$newNode->appendChild($node->firstChild); // changes firstChild to next!?
$node->ownerDocument->replaceChild($newNode, $node); // changes $node?
// not need return $newNode;
}
replaceChild()メソッドによりエラーが発生しました。
Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error'