我正在尝试将元素添加到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>
顺便一提:
我不知道jquery或
php
但我知道asp.net
如果我将打开的 url 更改为"XMLFile.xml",则会收到一条错误消息,指出"方法不允许"。
我有一个激活
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>