用HTML表单/PHP编写分层XML
我正在从事一个项目,我希望提供一个HTML表单,用户可以在表单输入中输入值,然后在提交时将其添加到XML文件中 到目前为止,我已经找到了如何执行此操作的示例,但仅限于一个XML数据级别,例如一个表单,该表单的名称输入提交到XML文件,如下所示:用HTML表单/PHP编写分层XML,php,xml,Php,Xml,我正在从事一个项目,我希望提供一个HTML表单,用户可以在表单输入中输入值,然后在提交时将其添加到XML文件中 到目前为止,我已经找到了如何执行此操作的示例,但仅限于一个XML数据级别,例如一个表单,该表单的名称输入提交到XML文件,如下所示: <meals><type>breakfast</type></meals> <meals> <meal> <type>
<meals><type>breakfast</type></meals>
<meals>
<meal>
<type>breakfast</type>
<ingredients>
<ing>eggs</ing>
<ing>pork chop</ing>
</ingredients>
</meal>
<meal>
<type>dinner</type>
<ingredients>
<ing>eggs</ing>
<ing>pork chop</ing>
</ingredients>
</meal>
</meals>
许多开发人员忽略了如何命名输入字段,特别是在涉及到输入字段时 在这种特殊情况下,当您构建XML时,它可以使您的生活更轻松 HTML 提交后,它使循环更容易 PHP 尽管如果您足够聪明,您可能可以递归地构建XML,因为在某个地方有一个模式——不幸的是,我不是
这个答案基于此。您好,您给出了一个当前预期和实际输出的示例,这很好,但我们需要将输入和当前代码缩减为a,以便了解您的困境。您的PHP脚本在哪里,这里有点提到,但没有提到?您好,感谢您的回复。我觉得我的问题越来越长了,所以在添加PHP脚本之前我把它缩短了,我意识到这没有多大意义。我对实际代码做了一些语义上的修改,以使问题更简单、更清晰,因此我正在努力将上面发布的代码与当前运行的PHP脚本进行协调。希望我能很快编辑这个问题。谢谢
<meals>
<meal>
<type>breakfast</type>
<ingredients>
<ing>eggs</ing>
</ingredients>
</meal>
<meal>
<type>dinner</type>
<ingredients>
<ing>pork chop</ing>
</ingredients>
</meal>
</meals>
<meals>
<meal>
<type>breakfast</type>
<ingredients>
<ing>eggs</ing>
<ing>pork chop</ing>
</ingredients>
</meal>
<meal>
<type>dinner</type>
<ingredients>
<ing>eggs</ing>
<ing>pork chop</ing>
</ingredients>
</meal>
</meals>
<form>
<input name="done" value="done" type="submit">
<fieldset name="meal">
type: <input name="type[]" type="text">
<br>
Ingredients
<fieldset name="ingredients">
ing. name: <input name="ingName[]" type="text">
</fieldset>
</fieldset>
<fieldset name="meal">
type: <input name="type[]" type="text">
<br>
Ingredients
<fieldset name="ingredients">
ing. name: <input name="ingName[]" type="text">
</fieldset>
</fieldset>
</form>
if(isset($_REQUEST['done']))
{$xml = new DOMDocument("1.0","UTF-8");
$xml->load("groceries4.xml");
$rootTag=$xml->getElementsByTagName("groceries")->item(0);
$mealTypes=$_REQUEST['type'];
foreach($mealTypes as $mt)
{$mealTag=$xml->createElement("meal");
$mealType=$xml->createElement("type",$mt);
$mealTag->appendChild($mealType);
$ingrsTag=$xml->createElement("ingredients");
$mealTag->appendChild($ingrsTag);
$mealIngs=$_REQUEST['ingName'];
foreach($mealIngs as $mi)
{$ingTag=$xml->createElement("ing",$mi);
$ingrsTag->appendChild($ingTag);};
$rootTag->appendChild($mealTag);};
$xml->save("groceries4.xml");
}
?>
<form method="post">
<!-- meal #1 -->
<div class="meal">
<h1>Meal #1</h1>
<h2>Type</h2>
<input type="text" name="meals[0][type]" value="m1 t" />
<div class="ingredients">
<h2>Ingredients</h2>
<div class="ingredient">
<h3>Ingredient #1</h3>
<input type="text" name="meals[0][ingredients][0][inc]" value="m1 ing1" />
</div>
<div class="ingredient">
<h3>Ingredient #2</h3>
<input type="text" name="meals[0][ingredients][1][inc]" value="m1 ing2" />
</div>
</div>
</div>
<!-- meal #2 -->
<div class="meal">
<h1>Meal #2</h1>
<h2>Type</h2>
<input type="text" name="meals[1][type]" value="m2 t" />
<div class="ingredients">
<h2>Ingredients</h2>
<div class="ingredient">
<h3>Ingredient #1</h3>
<input type="text" name="meals[1][ingredients][0][inc]" value="m2 ing1" />
</div>
<div class="ingredient">
<h3>Ingredient #2</h3>
<input type="text" name="meals[1][ingredients][1][inc]" value="m2 ing2" />
</div>
</div>
</div>
<!-- keep going -->
<input type="submit" value="Save" />
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$doc = new DOMDocument('1.0', 'UTF-8');
$xmlEl = $doc->createElement("xml");
$xmlEl = $doc->appendChild($xmlEl);
// add meals
if (isset($_POST['meals'])) {
$mealsEl = $doc->createElement("meals");
$mealsEl = $xmlEl->appendChild($mealsEl);
foreach ($_POST['meals'] as $meal) {
// add meal
$mealEl = $doc->createElement("meal");
$mealEl = $mealsEl->appendChild($mealEl);
// add meal type
if (isset($meal['type'])) {
$mealEl->appendChild($doc->createElement("type", $meal['type']));
}
// add meal ingredients
if (isset($meal['ingredients'])) {
$ingredientsEl = $doc->createElement("ingredients");
$ingredientsEl = $mealEl->appendChild($ingredientsEl);
foreach ($meal['ingredients'] as $ingredient) {
// add ingredient
$ingredientEl = $doc->createElement("ingredient");
$ingredientEl = $ingredientsEl->appendChild($ingredientEl);
// add inc
if (isset($ingredient['inc'])) {
$ingredientEl->appendChild($doc->createElement("inc", $ingredient['inc']));
}
}
}
}
}
$doc->save("meals.xml");
}
?>