【100分求助】请问PHP中如何判断两个XML节点是否相同

asuka986 2014-03-12 03:49:19
请问各路大神,在XML节点层次结构不确定的情况下,如何判断两个XML节点是否相同?
这里我们约定当节点存在子节点时,子节点的排列顺序不影响XML节点的判断。

例如有以下两个XML节点:
节点1:

<a>
<b><d>1</d></b>
<c>2</c>
</a>

节点2:

<a>
<c>2</c>
<b><d>1</d></b>
</a>

在我们现在的逻辑中,认为节点1和节点2是相同的两个节点

请问在PHP中有没有什么办法可以判断这两个节点是相同的呢?

谢谢!
...全文
164 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
嘻哈大咖秀 2014-03-12
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
$s =<<< XML
<root>
<a>
    <b><d>1</d></b>
    <c>2</c>
</a>
<a>
    <c>2</c>
    <b><d>1</d></b>
</a>
</root>
XML;

$xml = simplexml_load_string($s);
$t = $xml->xpath('///a');
$t = array_map('objectToarray', $t);
//print_r($t);
var_dump($t[0] == $t[1]);

function objectToArray($d) { 
  if (is_object($d)) { 
    $d = get_object_vars($d); 
  }
  if (is_array($d)) { 
    return array_map(__FUNCTION__, $d); 
  } else { 
    return $d; 
  } 
}
bool(true)
我还想用phpQuery实现的 看你写出来了我就不贴出来了
asuka986 2014-03-12
  • 打赏
  • 举报
回复
T T 多谢版主!一个很好的思路~
xuzuning 2014-03-12
  • 打赏
  • 举报
回复
$s =<<< XML
<root>
<a>
    <b><d>1</d></b>
    <c>2</c>
</a>
<a>
    <c>2</c>
    <b><d>1</d></b>
</a>
</root>
XML;

$xml = simplexml_load_string($s);
$t = $xml->xpath('///a');
$t = array_map('objectToarray', $t);
//print_r($t);
var_dump($t[0] == $t[1]);

function objectToArray($d) { 
  if (is_object($d)) { 
    $d = get_object_vars($d); 
  }
  if (is_array($d)) { 
    return array_map(__FUNCTION__, $d); 
  } else { 
    return $d; 
  } 
}
bool(true)

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧