1

我会搜索这个问题并找到一些问题,但他们没有提到我的错误......

我正在尝试删除我的 DOM 文档的一个孩子,当我键入该$x->removeChild($key); 函数时,什么也没发生......

$xmlreq = new DOMDocument;
$xmlreq->loadXML($xmlStr);
$x = $xmlreq->getElementsByTagName('*');
foreach($x as $key)
{
    if (substr($key->nodeValue,0,3)=="{{{" and substr($key->nodeValue,-3)=="}}}")
    {
        $field = explode("|",substr($key->nodeValue,3,strlen($key->nodeValue)-6));

        if((int)$field[3]==0)
        {
            if(trim($_POST[$field[2]])=="")
            {
                $x->removeChild($key);
            }else{
                $key->nodeValue = trim($_POST[$field[2]]);
            }
        }elseif((int)$field[3]==1)
        {
            if(trim($_POST[$field[2]])=="")
            {
                $errors.="";
            }else{
                $key->nodeValue = trim($_POST[$field[2]]);
            }
        }else{

        }



    }
}

header("content-type: application/xml");
print $xmlreq->saveXml();

这是我的xml:

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<check>
<contact:check xmlns:contact="http://epp.nic.ir/ns/contact-1.0">
<contact:id>ghhg-ghgh</contact:id>
<contact:id>45</contact:id>
<contact:id>45</contact:id>
<contact:id>45</contact:id>
<contact:authInfo>
<contact:pw>1561651321321</contact:pw>
</contact:authInfo>
</contact:check>
</check>
<clTRID>TEST-12345</clTRID>
</command>
</epp>

我想删除其中一个<contact:id>45</contact:id>

4

1 回答 1

0

您的循环什么也不做,因为外部条件正在寻找一个以nodeValue开头{{{和结尾的节点}}}

foreach($x as $key)
{
    if (substr($key->nodeValue,0,3)=="{{{" and substr($key->nodeValue,-3)=="}}}")

此外, DOMNodeList中没有removeChild()方法。您可能想先获取节点的父节点,然后调用它的removeChild()方法。

一个可能的替代方案:

$x = $xmlreq->getElementsByTagName('*');
$remove = TRUE;
foreach($x as $key)
{
    if( $key->nodeName=='contact:id' && $key->nodeValue=='45' ){
        if($remove){
            $key->parentNode->removeChild($key);
            $remove = FALSE;
        }
    }
}
于 2013-02-18T13:22:35.573 回答