如何使用 Ajax 和 JavaScript 保存 XML 文件

how to save xml file with ajax and javascript

本文关键字:保存 XML 文件 JavaScript 何使用 Ajax      更新时间:2023-09-26

我正在尝试将元素添加到xml文件中。我已经使用调试器检查了该程序,我看到它确实将元素添加到 xml 文件中,但是当我停止运行时,该文件没有保存任何更改。这是JavaScript文件:

var xmlhttp = LoadXMLHttp();
var xmlDoc=LoadXMLDoc("XMLFile.xml");;
function LoadXMLHttp() {
    var xmlHttp;
    if (window.XMLHttpRequest)
        xmlHttp = new XMLHttpRequest();
    else
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    return xmlHttp;
}
function LoadXMLDoc(FileName) {
    xmlhttp.open("GET", FileName, false);
    xmlhttp.send(null);
    return xmlhttp.responseXML;
}
function CreateXmlElement() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        newMessageElement = xmlDoc.createElement("message");
        newTextElement = xmlDoc.createElement("text");
        newText = xmlDoc.createTextNode("I am fine");
        newTextElement.appendChild(newText);
        newMessageElement.appendChild(newTextElement);
        x = xmlDoc.documentElement;
        x.appendChild(newMessageElement);
    }
}
function AddXMLElement() {
    xmlhttp.open("POST", "Default.aspx", true);
    xmlhttp.setRequestHeader("Accept", "text/xml");
    xmlhttp.onreadystatechange = CreateXmlElement;
    xmlhttp.send(xmlDoc);
}

这是 xml 文件:

<?xml version="1.0" encoding="utf-8" ?>
<conversation>
  <message>
    <text>Hi</text>
  </message>
  <message>
    <text>How are you?</text>
  </message>
</conversation>

顺便一提:

  1. 我不知道jquery或php但我知道asp.net

  2. 如果我将打开的 url 更改为"XMLFile.xml",则会收到一条错误消息,指出"方法不允许"。

  3. 我有一个激活AddXMLElement()功能的按钮。

您正在执行 CreateXmlElement 方法作为对 AJAX 帖子的回调。因此,您可以在将文档发送到服务器之后而不是之前对其进行修改。这就是不保存修改后的文档的原因。

您可能想执行以下操作:

function CreateXmlElement() {
    newMassageElement = xmlDoc.createElement("massage");
    newTextElement = xmlDoc.createElement("text");
    newText = xmlDoc.createTextNode("I am fine");
    newTextElement.appendChild(newText);
    newMassageElement.appendChild(newTextElement);
    x = xmlDoc.documentElement;
    x.appendChild(newMassageElement);
}
function AddXMLElement() {
    CreateXmlElement();
    xmlhttp.open("POST", "Default.aspx", true);
    xmlhttp.setRequestHeader("Accept", "text/xml");
    xmlhttp.send(xmlDoc);
}

这种结构对我有用。它打开一个xml文件,更改一个标签并将其保存回服务器。网页部分:

<!DOCTYPE html>
  <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>xml </title>
    </head>
    <body>
    <div id="xml_tag0" >
      zero  
    </div>  
    <div id="xml_tag" >
      Start!!  
    </div>
    <div id="xml_tag2" >
      Start!!  
    </div>
    </body>
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script type="text/javascript" src="./js/test_xml_load_and_save.js" charset="utf-8"></script>
  </html>

JavaScript 部分(test_xml_load_and_save.js(:

      $.ajax({
      type: 'GET',
      url: '../php/B.xml',
      dataType: 'text',
      success: function(xml){
            doc = $.parseXML(xml)
            $('#xml_tag').text($(doc).find('row FIELD2').eq(2).text());  
            console.log($(doc).find('row FIELD2').eq(2).text());    
            $(doc).find('row FIELD2').eq(2).text('50%');
            xml = (new XMLSerializer()).serializeToString(doc);
            //var dataString = '<test></test>';
            var dataString = xml; 
            $('#xml_tag0').text(xml);
            $.ajax({  
            type: 'POST',
            url: '../php/ToXML.php',          
            contentType: "text/xml",
            dataType:'text',
            data: {xml : dataString},
            cache: false,
            success: function(response) {
                console.log(response);
                $('#xml_tag2').text(response);
            },
            success: function(data){
                console.log('LOG success: '+data); 
                $('#xml_tag2').text('LOG success: '+data);
            } 
            });

      }});

和PHP部分(php/ToXML.php(:

      <?php
      header('Content-Type: text/html; charset=UTF-8');

      $data = $_POST['xml'];
      $xml = file_get_contents('php://input');
      $xml = rawurldecode($xml);
      $xml = str_replace('+', '', $xml);
      $xml = str_replace('xml=', '', $xml);
      //echo ":".$xml;
      $xml = '<?xml version="1.0" encoding="UTF-8"?>' . $xml;
      $filename = "B.xml";
      $f = fopen($filename, 'w+');
      fwrite($f, $xml);
      fclose($f);
      echo "Ok";
      ?>

XML 文件:

 <?xml version="1.0" encoding="UTF8"?>
  <root>
  <row>
  <FIELD1>Cat1</FIELD1>
  <FIELD2>Min</FIELD2>
  <FIELD3>Neutral</FIELD3>
  <FIELD4>Max</FIELD4>
  </row>

  <row>
  <FIELD1>Liquid</FIELD1>
  <FIELD2>0%</FIELD2>
  <FIELD3>7%</FIELD3>
  <FIELD4>65%</FIELD4>
  </row>

  <row>
  <FIELD1>Bonds</FIELD1>
  <FIELD2>25%</FIELD2>
  <FIELD3>50%</FIELD3>
  <FIELD4>70%</FIELD4>
  </row>

  <row>
  <FIELD1>Equities</FIELD1>
  <FIELD2>10%</FIELD2>
  <FIELD3>25%</FIELD3>
  <FIELD4>35%</FIELD4>
  </row>

  <row>
  <FIELD1>AltInv</FIELD1>
  <FIELD2>0%</FIELD2>
  <FIELD3>18%</FIELD3>
  <FIELD4>30%</FIELD4>
  </row>
  </root>