Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用HTML表单/PHP编写分层XML_Php_Xml - Fatal编程技术网

用HTML表单/PHP编写分层XML

用HTML表单/PHP编写分层XML,php,xml,Php,Xml,我正在从事一个项目,我希望提供一个HTML表单,用户可以在表单输入中输入值,然后在提交时将其添加到XML文件中 到目前为止,我已经找到了如何执行此操作的示例,但仅限于一个XML数据级别,例如一个表单,该表单的名称输入提交到XML文件,如下所示: <meals><type>breakfast</type></meals> <meals> <meal> <type>

我正在从事一个项目,我希望提供一个HTML表单,用户可以在表单输入中输入值,然后在提交时将其添加到XML文件中

到目前为止,我已经找到了如何执行此操作的示例,但仅限于一个XML数据级别,例如一个表单,该表单的名称输入提交到XML文件,如下所示:

    <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");
}
?>