我正在尝试使用 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
标志来防止它使用自关闭标签。