使用 DOMDocument 修改 XML 文档会对 XML 进行不需要的更改


Modifying XML document with DOMDocument is making undesired changes to the XML

我正在尝试使用 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 文件的开头添加<?xml version="1.0"?>,并且如果没有值,则通过内联任何不必要的结束标记来修改一些<parameter>元素。 例如,<parameter name="email"></parameter>会变成<parameter name="email" />。 它还删除了元素中其他一些不必要的空格。

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

好吧,一个有效的XML文件将具有XML定义。此外,您可以通过在save()中使用LIBXML_NOEMPTYTAG标志来防止它使用自关闭标签。