DOMDocument库从标记名称中删除冒号

时间:2017-03-07 16:45:35

标签: php html xml domdocument

假设我有一个HTML标记<ui:button>,它引用网页上的一个按钮,最终会在PHP中变成new UIButton()

使用DOMDocument库时,元素的$tagName属性仅为button。为什么会这样,我如何在其中保留ui:

1 个答案:

答案 0 :(得分:1)

ui是命名空间别名/前缀。寻找像xmlns:ui="..."这样的属性。该属性的值是URN,它是一个唯一的字符串,用于定义标记所属的格式。通常,URL用于此目的,因为它可以避免冲突(没有人会在域中使用命名空间),并且可以在URL上放置有关命名空间的文档。命名空间是一种XML功能,允许您定义和混合格式,而不会在元素节点名称之间发生冲突。

假设该属性看起来像xmlns:ui="http://example.tld/ns/ui"。在这种情况下,您可以将标记名称读为{http://example.tld/ns/ui}button。以这种方式编写将增加大量开销并使XML难以阅读 - 因此前缀/别名。

以下3个XML都可以读作{http://example.tld/ns/ui}button

  • <ui:button xmlns:ui="http://example.tld/ns/ui"/>
  • <new-ui:button xmlns:new-ui="http://example.tld/ns/ui"/>
  • <button xmlns="http://example.tld/ns/ui"/>

正如您所看到的,别名可以更改并且是可选的。如果您检查DOMNode的属性,则会看到属性$namespaceURI$locaName。使用它们而不是$nodeName构建应用程序。以下是具有名称空间感知的后缀NS的方法。