Javascript 在树中格式化输出文件的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 我需要一些帮助。这是我的密码: <

我尝试了很多方法,使用php代码以树格式保存到xml文件,但没有成功。有点不对劲,我不知道。输出格式仍然是一个长字符串,如下所示:

<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并在其中附加您的新产品。这有助于请升级投票并标记为已接受:)