Php XML问题的生成
我正在实现一件非常简单的事情:生成XML,我将把它发布到设备上。 我需要这样的东西:Php XML问题的生成,php,xml,Php,Xml,我正在实现一件非常简单的事情:生成XML,我将把它发布到设备上。 我需要这样的东西: <field1 parameter1='value1' parameter2='value2'/> <field2 parameter1='value1' parameter2='value2'/> <field3> <subfield1>subvalue1</subfied1> <subfield2>subvalue2</subfi
<field1 parameter1='value1' parameter2='value2'/>
<field2 parameter1='value1' parameter2='value2'/>
<field3>
<subfield1>subvalue1</subfied1>
<subfield2>subvalue2</subfied2>
</field3>
子值1
子值2
这就是我生成它的方式
$newConfig.="<field1 parameter1='".$_POST['value1']."' parameter2='".$_POST['value2']."' />\n";
$newConfig.="<field2 parameter1='".$_POST['value1']."' parameter2='".$_POST['value2']."' />\n";
$newConfig.="<field3>
<subfield1>".$_POST['subvalue1']."</subfield1>
<subfield2>".$_POST['subvalue2']."</subfield2>
</field3>";
$newConfig.=“\n”;
$newConfig.=“\n”;
$newConfig.=”
“$_POST['subvalue1']”
“$_POST['subvalue2']”
";
这样做效果很好,产生了适当的价值。
但现在,当我用其他值测试它时,出于某种原因,它生成了如下内容(我看配置的var_dump):
子值1
子值2
值有字母、数字、点和@。
这怎么可能?是什么引起的?
更新 我尝试了DOMDocument,但输出是相同的
<fields>
<field1 parameter1="value1" parameter2="value2">
<field2 parameter1="value1" parameter2="value2">
<field3>
<subfield1>subvalue1</subfield1>
<subfield2>subvalue2</subfield2>
</field3>
</field2></field1></fields>
子值1
子值2
怎么可能呢?
更新1 我注意到,这个问题只是在我检查浏览器中的元素时出现的,若我查看页面的源代码,就可以了
<fields>
<field1 parameter1="value1" parameter2="value2"/>
<field2 parameter1="value1" parameter2="value2"/>
<field3>
<subfield1>subvalue1</subfield1>
<subfield2>subvalue2</subfield2>
</field3>
</fields>
子值1
子值2
那么,什么是真正的xml?
问题是我把它贴到了设备上,它工作不正常,我应该知道这是我的错,还是不是。XML无效。XML文档需要有一个文档元素节点。所有其他元素节点都必须是该节点的后代 像这样:
<documentElement>
<child>
<childOfChild>...
</child>
</documentElement>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<fields>
<field1 parameter1="value1" parameter2="value2"/>
<field2 parameter1="value1" parameter2="value2"/>
<field3>
<subfield1>subvalue1</subfield1>
<subfield2>subvalue2</subfield2>
</field3>
</fields>
每个节点都知道其文档,因此您可以轻松地将任务封装到函数/方法中:
function addSubFields($parentNode, array $subFields) {
$document = $parentNode->ownerDocument;
foreach ($subFields as $name => $text) {
$subfield = $parentNode->appendChild($document->createElement($name));
$subfield->appendChild($document->createTextNode($text));
}
}
addSubFields($field, ['subfield1' => 'value1', 'subfield2' => 'value2']);
这里的xml是否与var_dump显示的相同?您得到的值是什么?@benjayhutton我提到过:值有字母、数字、点和@Close,因为它与编程无关?它还与什么有关?我用php生成xml。哦,对不起@benjayhutton,我是说raveenaniga我不明白你的问题,但我可以在更新中回答吗?那很好,试试XMLWriter。我现在正在寻找将输出放入字符串变量的可能性。如果您能帮助我,或者当我自己发现这种可能性时,我会同意您的答案。请注意其他错误,可能是问题的根源,但您帮了我一点忙,所以我接受了您的答案。这就是我所说的“注意转义和编码”。如果值包含特殊字符,如
&
,
<?xml version="1.0" encoding="UTF-8"?>
<fields>
<field1 parameter1="value1" parameter2="value2"/>
<field2 parameter1="value1" parameter2="value2"/>
<field3>
<subfield1>subvalue1</subfield1>
<subfield2>subvalue2</subfield2>
</field3>
</fields>
$document = new DOMDocument();
$document->formatOutput = true;
$fields = $document->appendChild($document->createElement('fields'));
$field = $fields->appendChild($document->createElement('field1'));
$field->setAttribute('parameter1', 'value1');
$field->setAttribute('parameter2', 'value2');
$field = $fields->appendChild($document->createElement('field2'));
$field->setAttribute('parameter1', 'value1');
$field->setAttribute('parameter2', 'value2');
$field = $fields->appendChild($document->createElement('field3'));
$subfield = $field->appendChild($document->createElement('subfield1'));
$subfield->appendChild($document->createTextNode('subvalue1'));
$subfield = $field->appendChild($document->createElement('subfield2'));
$subfield->appendChild($document->createTextNode('subvalue2'));
echo $document->saveXml();
function addSubFields($parentNode, array $subFields) {
$document = $parentNode->ownerDocument;
foreach ($subFields as $name => $text) {
$subfield = $parentNode->appendChild($document->createElement($name));
$subfield->appendChild($document->createTextNode($text));
}
}
addSubFields($field, ['subfield1' => 'value1', 'subfield2' => 'value2']);