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 = $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">

结果是:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值