php xmlns,如何在PHP DOM中检测和删除不必要的xmlns:属性?
如何检测:$d = new DOMDocument();$d->loadXML('');$sxe = simplexml_import_dom($d);$namespaces = $sxe->getDocNamespaces(true);$x = new DOMXpath($d);foreach($namespaces as $prefix => $url){$count = $
如何检测:
$d = new DOMDocument();
$d->loadXML('
');
$sxe = simplexml_import_dom($d);
$namespaces = $sxe->getDocNamespaces(true);
$x = new DOMXpath($d);
foreach($namespaces as $prefix => $url){
$count = $x->evaluate("count(//*[namespace-uri()='".$url."' or @*[namespace-uri()='".$url."']])");
echo $prefix.' ( '.$url.' ): used '.$count.' times'.PHP_EOL;
}
如何删除:pfff,关于我唯一知道的选项是使用xml_parse_into_struct()(因为这不是libxml2 reliant afaik),并使用XML Writer函数循环生成的数组,跳过未使用的名称空间声明.没有一个有趣的通行时间,所以我将把实施留给你.根据this question,另一种选择可能是XSL,但我怀疑它有多大用处.我的最大努力似乎取得了成功,但将“顶级”/ rootnode命名空间移动到了子节点,导致更加混乱.
编辑:这似乎工作:
给定XML(添加了一些命名空间混乱):
xmlns:someprefix="http://mynamespace/foo"
xmlns:otherprefix="http://mynamespace/bar"
foo="bar"
yetanotherprefix:bax="foz">
使用基于以前$used数组的xsl(namespaces& not()子句,所以你仍然需要afaik.
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:yetanotherprefix="http://mynamespace/yet"
xmlns:otherprefix="http://mynamespace/bar">
结果是:
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)