使用DOMDocument修改XML文档正在对XML进行不必要的更改

时间:2013-10-04 13:10:06

标签: php domdocument

我正在尝试使用DOMDocument修改xml文件。我所拥有的是工作,但它增加了对xml文件的修改,而不是我要求的。

代码:

$sDB = $this->oDB->getDBName();
$file = 'test.xml';

// Load XML
$dom = new DOMDocument;
$dom->preserveWhiteSpace = true;
$dom->formatOutput = false;
$dom->validateOnParse = false;
$dom->load($file);

// Find TEST Node
$nodes = $dom->getElementsByTagName('parameter');
foreach($nodes as $node)
{
    if($node->getAttribute('name') == 'TEST')
    {
        $sBDC = $node->nodeValue;
        $aBDC = explode(',',$sBDC);
        if(!in_array($sDB,$aBDC))
            array_push($aBDC,$sDB);
        $sBDC = implode(',',$aBDC);
        $node->nodeValue = $sBDC;
        $dom->save($file);
        break;
    }
}

一些XML:

<parameter name="Integration" username="testuser" password="testpassword">/parameter>
<parameter name="API">accept.php</parameter>
<parameter name="TRANSFER" username="admin" password="letmein" />
<parameter name="TEST">dbname</parameter>

问题:

它将<?xml version="1.0"?>添加到XML文件的开头,并且如果没有值,则通过内联任意不必要的结束标记来修改一些<parameter>元素。例如,<parameter name="email"></parameter>将成为<parameter name="email" />。它还删除了元素中的一些其他不必要的空白区域。

虽然我的直觉告诉我这些改变不会伤害任何东西,但如果发生的唯一变化是预期的变化,我会感到更加舒服。不幸的是,如果有一些代码埋藏在实际上正在寻找这些不必要的空白区域的话,我不会感到惊讶。

1 个答案:

答案 0 :(得分:1)

嗯,有效的XML文件将具有XML定义。此外,您可以使用LIBXML_NOEMPTYTAG中的save()标记来禁止使用自关闭标记。