我正在使用php创建一个xml文件。 生成的XML是。
<xml>
<data>
<firstname>Peter</firstname>
<insertion>V</insertion>
<lastname>John</lastname>
<gender>Male</gender>
</data>
</xml>
但是如果值为null,则生成的xml为(查看节点插入)。
<xml>
<data>
<firstname>Peter</firstname>
<insertion/>
<lastname>John</lastname>
<gender>Male</gender>
</data>
</xml>
如果值为null,我希望创建xml以使其产生。
<xml>
<data>
<firstname>Peter</firstname>
<insertion></insertion>
<lastname>John</lastname>
<gender>Male</gender>
</data>
</xml>
这是我的代码。
$doc = new DOMDocument('1.0');
$doc->formatOutput = true;
$root = $doc->createElement('data');
$doc->appendChild($root);
$data = $doc->createElement('data');
$fname = $doc->createElement('firstname');
$fname->appendChild(
$doc->createTextNode($row['firstname']));
$data->appendChild($fname);
$ins = $doc->createElement('insertion');
$ins->appendChild(
$doc->createTextNode($row['insertion']));
$data->appendChild($ins);
$lname = $doc->createElement('lastname');
$lname->appendChild(
$doc->createTextNode($row['lastname']));
$data->appendChild($lname);
$gender = $doc->createElement('gender');
$gender->appendChild(
$doc->createTextNode($row['gender']));
$data->appendChild($gender);
$root->appendChild($data);
$doc->save($path . "test.xml");
我在创建它之后将此xml作为响应发送。因此,在客户端, lastname 节点正在成为插入的子节点
<insertion/>
答案 0 :(得分:0)
默认输出的内容称为“速记格式”。它是完全有效的XML,任何正确实现的XML解析器应该能够很好地处理它。我可以想到强制“longhand”输出的唯一原因是你必须将输出的XML提供给一个有问题并且无法处理速记案例的解析器。如果您可以使用有效的解析器替换有问题的解析器,那么我建议您改为使用。
如果您必须输出非简写版本,那么DOMDocument :: SaveXML()和DOMDocument :: save()方法可以让您配置它们的输出。可以设置一个标志,使输出变为冗长而不是速记。但是,PHP手册中没有详细记录。以下代码应说明其工作原理。
$dom = new DOMDocument ();
$dom -> loadXML ('<root><foo>foo</foo><bar></bar><baz>baz</baz></root>');
var_dump ($dom -> saveXML ());
var_dump ($dom -> saveXML ($dom, LIBXML_NOEMPTYTAG));
老实说,如果解析器打算处理你的XML没有错误的话,我认为这样做并不重要。