【问题标题】:Get nodes with unique attribute value获取具有唯一属性值的节点
【发布时间】:2013-10-05 11:44:54
【问题描述】:

我想清理一个 XML 文件,并且不允许节点具有具有相同值的属性。 XML 看起来像:

<bar>
  <foo id="123" some="attribute"/>
  <foo id="abc" some="other attribute"/>
  <foo id="123" some="different attribute"/>
</bar>

它应该看起来像:

<bar>
  <foo id="abc" some="other attribute"/>
  <foo id="123" some="different attribute"/>
</bar>

我正在使用 PHP,但我不想做很多循环,所以我想到了使用带有 DOMXPath 对象的 XPath 请求。 我发现 Xpath distinct-values 函数可能会有所帮助,但据我了解,它仅适用于重复节点,不适用于节点重复属性。

在 XPath 中是否有解决方案,或者在 PHP 中是否有很棒的算法?

【问题讨论】:

  • foo 节点保留的规则是什么?最后一个看到的?
  • @TimCooper 是的,但在最坏的情况下,我可以保留第一个。

标签: php xml xpath duplicate-removal


【解决方案1】:

尝试遵循 xpath

/bar/foo[not(@id = following-sibling::foo/@id)]

因为您只提供了很少的测试数据,所以我没有进行太多测试,但我认为它可以工作。

【讨论】:

  • 完美运行!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多