php - DOMNode::isEqualNode():尚未实现
问题描述
我在 php 中创建了这个函数来检查父 XML 是否已经有一个 xml 来插入它:
function has_xml_node( \DOMElement $needle, \DOMElement $node ) {
if( $node->hasChildNodes() ){
foreach ( $node->childNodes as $childNode ) {
if( $needle->isEqualNode( $childNode ) ){
return true;
}
}
}
return false;
}
我收到了这个 php 错误:
DOMNode::isEqualNode(): 尚未在...中实现
我怎样才能解决这个问题 ?
解决方案
我在这里找到了解决方案。
利用$needle->isSameNode( $childNode );
但它似乎也检查'baseURI'
了,所以如果你有两个相同的标签但来自不同的 xml 文件,请$needle->isSameNode( $childNode );
返回false
.
我做了一个函数来解决这个问题。
function is_same_node( \DOMNode $node_to_compare, \DOMNode $node_refered, $with_attributes = true ) {
if( $node_to_compare->tagName !== $node_refered->tagName )
return false;
if( $node_to_compare->nodeValue !== $node_refered->nodeValue )
return false;
if( $node_to_compare->prefix !== $node_refered->prefix )
return false;
if( $with_attributes ){
if( !$node_to_compare->hasAttributes() && $node_refered->hasAttributes() ){
return false;
}else{
if( !$node_refered->hasAttributes() && $node_to_compare->hasAttributes() ){
return false;
}else{
foreach ( $node_to_compare->attributes as $attribute ){
$find_attribute_with_same_value = false;
foreach ( $node_refered->attributes as $attribute_refered ){
if(
$attribute_refered->name === $attribute->name
&& ( $attribute_refered->value === $attribute->value )
){
$find_attribute_with_same_value = true;
}
}
if( !$find_attribute_with_same_value )
return false;
}
}
}
}
return true;
}
推荐阅读
- sql - 我想在访问 sql 中写一个 if else 语句,我确实写了一个代码,但它不工作
- azure - 无法在 Azure 分析服务中添加/连接 CosmosDB
- python-3.x - 无法从特定 python 路径创建 MSI 和 exe 文件
- kubernetes - 这个 Yaml 文件是什么版本的 Kubernetes Dashboard(1.6 或 1.7)?
- python - 如果 Pyramid 会话是单向散列而不是存储在服务器端,那么数据来自哪里?
- codemirror - 如何使用 CodeMirror 隐藏字符范围?
- javascript - 不变违规:尝试使用 Jest/Enzyme 测试 React 组件时元素类型无效错误
- python - 列表到数据框,列中列表中的每个元素
- symfony - 以关系数量为条件的教义查询
- c++ - 如何中断使用 Mako SDK 编写程序集?