繁体   English   中英

使用importNode而不是root或documentElement

[英]Use importNode other than the root or documentElement

前提:将重新发布该故事,并保留所有当前标记名,并添加任何新标记名,从而创建一个既包含原始标记名又包含新标记名的新故事。

所有这些都有效……我的问题是,如果重新发布的故事根本没有标签元素,则需要创建它,然后从原始故事中导入标签名。

$newXML='<story><metadata></metadata></story>';
$oldXML='<story><metadata><tags><tagname attribute="info"></tagname></tags></metadata></story>';

$newDom = new DomDocument;
$newDom->loadXML($newXML);

$newTagsNode = $newDom->createElement('tags','');

$oTags = $newDom->importNode($newTagsNode, true);
$newDom->documentElement->appendChild($oTags);

问题是我不希望oTag驻留在“ documentElement”或“ root”中,我希望它们驻留在故事/元数据中。

有没有办法xpath / query /选择“元数据”然后追加?

使用DOMXpath通过XPath查找元素列表。 这仍然会返回节点列表,但是您可以在搜索中提供更高的精度。 如果返回至少一个元素,则将其作为附加操作的目标节点。

$xpath = new DOMXpath($newDom);
$elemList = $xpath->query("/story/metadata");

if ($elemList->length > 0) {
    $elemList->item(0)->appendChild($oTags);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM