如前所述 here DOMConfiguration 尚未实现。我需要规范命名空间,以便只要提供前缀,子元素中的命名空间就会移动到根元素。
有没有非正则表达式的方法来做到这一点?
通过,我不确定,这是否可以通过 DOMConfiguration 实现,但我什至无法如您所见。
也许有设置libxml的方法?
谢谢。
最佳答案
好吧,正如所评论的,我已经重写了我的代码,以处理 DOM 构建上的命名空间。其工作原理如下:
class Foo {
const XMLNS = 'http://www.w3.org/2000/xmlns/';
/**
* Register a namespace with an optional prefix to the specified DOMElement.
*
* @param DOMElement $element
* @param string $namespaceUri
* @param string $prefix
*/
public static final function registerNS(DOMElement $element, $namespaceUri, $prefix=null) {
Preconditions::checkNotEmpty($namespaceUri);
$name = "xmlns";
if (!empty($prefix)) {
$name .= ":$prefix";
}
$element->setAttributeNS(self::XMLNS, $name, $namespaceUri);
}
}
现在,每次(在这里说每次,为了让事情变得更容易)我添加一个元素作为另一个元素的子元素,我调用这个方法并且主要提供 documentElement 作为第一个参数来向根元素添加命名空间:
DOMDocument $doc = [...];
DOMElement $element = [...];
DOMElement $newChild = [...];
Foo::registerNS($doc->documentElement, $newChild->namespaceURI, $newChild->prefix);
$element->appendChild($newChild);
关于PHP - DOMDocument/DOMConfiguration,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8339835/