gpt4 book ai didi

php - 在 php 中创建具有空值的 XML 节点

转载 作者:可可西里 更新时间:2023-11-01 13:32:09 24 4
gpt4 key购买 nike

我正在使用 php 创建一个 xml 文件。生成的 XML 是。

<xml>
<data>
<firstname>Peter</firstname>
<insertion>V</insertion>
<lastname>John</lastname>
<gender>Male</gender>
</data>
</xml>

但如果值为空,则生成的 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 的子节点

  <insertion/>

最佳答案

默认输出的内容称为“速记格式”。它是完全有效的 XML,任何正确实现的 XML 解析器都应该能够很好地处理它。我能想到强制“速记”输出的唯一原因是,如果您必须将输出的 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 的解析器没有错误,我认为这样做没有多大意义。

关于php - 在 php 中创建具有空值的 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14038660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com