Javascript 在树中格式化输出文件的XML不会';行不通
我尝试了很多方法,使用php代码以树格式保存到xml文件,但没有成功。有点不对劲,我不知道。输出格式仍然是一个长字符串,如下所示:Javascript 在树中格式化输出文件的XML不会';行不通,javascript,php,html,xml,forms,Javascript,Php,Html,Xml,Forms,我尝试了很多方法,使用php代码以树格式保存到xml文件,但没有成功。有点不对劲,我不知道。输出格式仍然是一个长字符串,如下所示: <products><product id="p02"><name>Name 2</name><price currency="USD">200</price></product></products> Name 2200 我需要一些帮助。这是我的密码: <
<products><product id="p02"><name>Name 2</name><price currency="USD">200</price></product></products>
Name 2200
我需要一些帮助。这是我的密码:
<?php
if(isset($_POST['submitSave'])) {
$products = new DOMDocument('1.0');
$products->preserveWhiteSpace = false;
$products->formatOutput = true;
$doc->load('data/product.xml');
$product = $products->addChild('product');
$product->addAttribute('id', $_POST['id']);
$product->addChild('name', $_POST['name']);
$product->addChild('price', $_POST['price']);
file_put_contents('data/product.xml', $doc->saveXML());
header('location:index.php');
}
?>
输出文件为product.xml。为了测试,我使用
$xmlstr=”“;
$sxe=新的simplexmlement($xmlstr);
$product=$sxe->addChild('product');
$product->addAttribute('id',$_请求['id']);
$product->addChild('name',$_请求['name']);
$price=$product->addChild('price',$_请求['price']);
$price->addAttribute('currency',$_请求['currency']);
$xmlOutput=$sxe->asXML();
文件内容('product.xml',$xmlOutput);
输出文件为product.xml。为了测试,我使用
$xmlstr=”“;
$sxe=新的simplexmlement($xmlstr);
$product=$sxe->addChild('product');
$product->addAttribute('id',$_请求['id']);
$product->addChild('name',$_请求['name']);
$price=$product->addChild('price',$_请求['price']);
$price->addAttribute('currency',$_请求['currency']);
$xmlOutput=$sxe->asXML();
文件内容('product.xml',$xmlOutput);
试试这个:
<?php
if(isset($_POST['submitSave'])){
$products = new DOMDocument('1.0');
$products->preserveWhiteSpace = false;
$products->formatOutput = true;
// $doc->load('data/product.xml');
$product = $products->createElement('product');
$product->setAttribute('id', $_POST['id']);
$name = $products->createElement('name', $_POST['name']);
$price = $products->createElement('price', $_POST['price']);
$products->appendChild($product);
$product->appendChild($name);
$product->appendChild($price);
file_put_contents('data/product.xml', $products->saveXML());
// echo $products->saveXML();
}
?>
这里是没有POST参数的演示
这是我在本地机器上的输出,与post参数一起工作
编辑:根据要求,这里是保存旧数据的代码
<?php
if(isset($_POST['submitSave'])){
// Disable errors due to empty xml files
error_reporting(E_ALL & ~E_WARNING);
$domDoc = new DOMDocument('1.0');
$domDoc->preserveWhiteSpace = false;
$domDoc->formatOutput = true;
// load xml file
try {
$domDoc->load('./data/product.xml');
} catch (\Throwable $th) {
//throw $th;
}
if($domDoc->getElementsByTagName('products')->length>0){
// If we already have products tag defined
$products = $domDoc->getElementsByTagName('products')[0];
}else{
// If we don't have any products tag, i.e. file is empty
$products = $domDoc->createElement('products');
}
// Create child node for product and set id(attribute), name(child), price(child)
$product = $domDoc->createElement('product');
$product->setAttribute('id', $_POST['id']);
$name = $domDoc->createElement('name', $_POST['name']);
$price = $domDoc->createElement('price', $_POST['price']);
$domDoc->appendChild($products);
$products->appendChild($product);
$product->appendChild($name);
$product->appendChild($price);
file_put_contents('./data/product.xml', $domDoc->saveXML());
}
?>
试试这个:
<?php
if(isset($_POST['submitSave'])){
$products = new DOMDocument('1.0');
$products->preserveWhiteSpace = false;
$products->formatOutput = true;
// $doc->load('data/product.xml');
$product = $products->createElement('product');
$product->setAttribute('id', $_POST['id']);
$name = $products->createElement('name', $_POST['name']);
$price = $products->createElement('price', $_POST['price']);
$products->appendChild($product);
$product->appendChild($name);
$product->appendChild($price);
file_put_contents('data/product.xml', $products->saveXML());
// echo $products->saveXML();
}
?>
这里是没有POST参数的演示
这是我在本地机器上的输出,与post参数一起工作
编辑:根据要求,这里是保存旧数据的代码
<?php
if(isset($_POST['submitSave'])){
// Disable errors due to empty xml files
error_reporting(E_ALL & ~E_WARNING);
$domDoc = new DOMDocument('1.0');
$domDoc->preserveWhiteSpace = false;
$domDoc->formatOutput = true;
// load xml file
try {
$domDoc->load('./data/product.xml');
} catch (\Throwable $th) {
//throw $th;
}
if($domDoc->getElementsByTagName('products')->length>0){
// If we already have products tag defined
$products = $domDoc->getElementsByTagName('products')[0];
}else{
// If we don't have any products tag, i.e. file is empty
$products = $domDoc->createElement('products');
}
// Create child node for product and set id(attribute), name(child), price(child)
$product = $domDoc->createElement('product');
$product->setAttribute('id', $_POST['id']);
$name = $domDoc->createElement('name', $_POST['name']);
$price = $domDoc->createElement('price', $_POST['price']);
$domDoc->appendChild($products);
$products->appendChild($product);
$product->appendChild($name);
$product->appendChild($price);
file_put_contents('./data/product.xml', $domDoc->saveXML());
}
?>
您的中缺少xml@AntonioAbrantes他说,这是产出,不是input@AntonioAbrantes我忘了把整个密码都放进去了。但它仍然不起作用,如果解决方案正常,请不要忘记按绿色标志关闭问题。您能进一步解释吗?“长串”和你所期望的有什么区别?在你的生活中缺失了什么xml@AntonioAbrantes他说,这是产出,不是input@AntonioAbrantes我忘了把整个密码都放进去了。但它仍然不起作用,如果解决方案正常,请不要忘记按绿色标志关闭问题。您能进一步解释吗?“长字符串”和你所期望的有什么区别?它仍然在一行中显示字符串,而不是在树输出中。你是巴西人。我也是。我想告诉你,我想把上面的字符串(childs)保存在一个树行(numa hierarquia)中。因为输出是一个只有一行的XML文件(这太棒了!),所以它仍然在一行中显示字符串,而不是在树输出中。你是巴西人。我也是。我想告诉你,我想把上面的字符串(childs)保存在一个树行(numa hierarquia)中。因为输出是一个只有一行的XML文件(太棒了)!所以它工作了,但是现在,每次我添加一个新条目时,最旧的数据都会被新条目覆盖(@Ecker我已更新代码以支持多个产品。它现在将解析现有xml并在其中附加新产品。这有助于升级投票并将其标记为已接受:)它工作正常,但现在,每次我添加新条目时,最旧的数据都会被新条目覆盖:(@Ecker我已更新代码以支持多个产品。它现在将解析现有xml并在其中附加您的新产品。这有助于请升级投票并标记为已接受:)