使用PHP从HTML表单创建XML结构

使用PHP从HTML表单创建XML结构,php,html,xml,Php,Html,Xml,我正在创建一个系统,用户可以在其中输入配料,然后保存其数量,我使用PHP将其保存为XML 它现在这样保存 <ingredients> <ingredient quantity="2">Apple</ingredient> <ingredient quantity="4">Banana</ingredient> </ingredients> 苹果 香蕉 相反,我想这样保存它,但我不知道如何保存

我正在创建一个系统,用户可以在其中输入配料,然后保存其数量,我使用PHP将其保存为XML

它现在这样保存

 <ingredients>
    <ingredient quantity="2">Apple</ingredient>
    <ingredient quantity="4">Banana</ingredient>
  </ingredients>

苹果
香蕉
相反,我想这样保存它,但我不知道如何保存

  <ingredient>
            <quantity_amount>2</tns:quantity_amount>
            <quantity_name>teaspoons</tns:quantity_name>
            <ingredient_name>baking powder</tns:ingredient_name>
        </ingredient>

2.
茶匙
发酵粉
对于添加的每种成分

这是我目前使用的PHP和HTML

HTML



PHP

//循环的开始,从0到IngreditName
对于($i=0;$i$element,'label'=>$element,'image'=>images/products/default.jpg');
}
//选择当前物料数量
$qty=$qty[$i];
//创建成分元素并填充$element
$Component=$xml->createElement('Component',$element);
//将数量属性设置为$qty值
$component->setAttribute('quantity',$quantity);
//将其附加到元素中
$Components->appendChild($Components);
}

要根据所需的XML结构创建新配料:

// creating the document and its root
$dom = new DOMDocument('1.0', 'utf-8');
$root = $dom->createElement('ingredients','');
$dom->appendChild($root);

// create new ingredient and link it to root 
$ingredient = $dom->createElement('ingredient','');
$root->appendChild($ingredient);    

// create children and link them to ingredient
$q_amount = $dom->createElement('quantity_amount',"1");
$q_name = $dom->createElement('quantity_name',"spoon");
$i_name = $dom->createElement('ingredient_name',"PHP");
$ingredient->appendChild($q_amount);
$ingredient->appendChild($q_name);
$ingredient->appendChild($i_name);

echo $dom->saveXML();
看到它工作了吗


在将表单插入XML之前,请确保清除表单中的用户输入

哦,对不起,忽略tns。这只是一种粗略的方式来展示我希望它如何以xml的形式出现。每种成分都有自己的成分,它们都在下面,如何创建XML<代码>simplexml或
DOM
或??我通过DOM创建它,是否可以循环使用多种成分?我已经尝试按照您的方式进行工作,但是我得到了这个xml jhk hey x skxs,成分只会自动关闭,然后我的其他元素会在结束时跟随xml@NickPocock看见我不知道代码中的
搜索
功能是什么,也不知道如何从表单中读取。但是这个示例展示了如何在循环中添加元素。
// Start for loop, from 0 to ingredientName
for ($i = 0; $i < count($ingredientName); $i++) {
    // Select current item
    $element = $ingredientName[$i];

    // Updated used ingredients list ONLY
    // if the ingredient wasn't added yet
    $temp = search($upIngreds, 'value', $element);
    if (empty($temp)) {
        $upIngreds[] = array('value' => $element, 'label' => $element, 'image' => 'images/products/default.jpg');
    }

    // Select current item quantity
    $qty = $quantity[$i];
    // Create ingredient element and fill with $element
    $ingredient = $xml->createElement('ingredient', $element);
    // Set quantity attiribute to $qty value
    $ingredient->setAttribute('quantity', $qty);
    // Append it to ingredients element
    $ingredients->appendChild($ingredient);
}
// creating the document and its root
$dom = new DOMDocument('1.0', 'utf-8');
$root = $dom->createElement('ingredients','');
$dom->appendChild($root);

// create new ingredient and link it to root 
$ingredient = $dom->createElement('ingredient','');
$root->appendChild($ingredient);    

// create children and link them to ingredient
$q_amount = $dom->createElement('quantity_amount',"1");
$q_name = $dom->createElement('quantity_name',"spoon");
$i_name = $dom->createElement('ingredient_name',"PHP");
$ingredient->appendChild($q_amount);
$ingredient->appendChild($q_name);
$ingredient->appendChild($i_name);

echo $dom->saveXML();