【发布时间】:2011-04-18 03:45:10
【问题描述】:
假设我有这样的源文档:
<element>
<subelement xmlns:someprefix="mynamespace"/>
</element>
xmlns:someprefix 显然在这里不需要,也不会做任何事情,因为该前缀没有用于该元素(或者在我的情况下,文档中的任何位置)。
在 PHP 中,当我使用 DOMDocument->loadXML() 将其加载到 DOM 树中后,我希望能够检测到这样的命名空间声明是否存在,并将其删除。
我知道我可以用hasAttribute() 阅读它,甚至可以用removeAttributeNS() 删除它(奇怪),但前提是我知道它的前缀。它根本没有出现在DOMNode->attributes 中,因为我试图找到的东西不被视为属性。除了将其序列化回 XML 字符串并运行正则表达式之类的东西之外,我看不到任何方法可以在不知道前缀的情况下检测到它的存在。
我该怎么做?有什么方法可以查询元素中声明了哪些命名空间(即 xmlns:something)?
【问题讨论】:
-
我想回答这个问题的一种方法是“别担心”。看起来这些属性根本不影响 DTD 验证(文档仍然有效),它们只是浪费不必要的字节并使文档看起来很丑。所以我现在完全可以忽略这个问题......不过,如果有解决方案就好了。
-
这确实是唯一的答案。忽略它。在未来的某个时候,您可能会添加一个子
<someprefix:someelement/>,此时,您会想要回命名空间。
标签: php xml dom namespaces xml-namespaces