我正在尝试使用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" />
。它还删除了元素中的一些其他不必要的空白区域。
虽然我的直觉告诉我这些改变不会伤害任何东西,但如果发生的唯一变化是预期的变化,我会感到更加舒服。不幸的是,如果有一些代码埋藏在实际上正在寻找这些不必要的空白区域的话,我不会感到惊讶。
答案 0 :(得分:1)
嗯,有效的XML文件将具有XML定义。此外,您可以使用LIBXML_NOEMPTYTAG
中的save()
标记来禁止使用自关闭标记。