Php 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

我正在实现一件非常简单的事情:生成XML,我将把它发布到设备上。 我需要这样的东西:

<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']);