Javascript 使用removeChild()方法后如何更新xml文件

Javascript 使用removeChild()方法后如何更新xml文件,javascript,xml,jsp,removechild,Javascript,Xml,Jsp,Removechild,我有一个名为“movies.xml”的xml文件。我需要从中删除第一部电影,所以我创建了“delete.jsp”文件,其中包含所需的代码 这两个文件都存在于Netbeans创建的javaweb项目文件夹中,我使用apachetomcat服务器作为localhost movies.xml <?xml version="1.0" encoding="UTF-8"?> <movies> <movie> <Title>Journey

我有一个名为“movies.xml”的xml文件。我需要从中删除第一部电影,所以我创建了“delete.jsp”文件,其中包含所需的代码

这两个文件都存在于Netbeans创建的javaweb项目文件夹中,我使用apachetomcat服务器作为localhost

movies.xml

<?xml version="1.0" encoding="UTF-8"?>
<movies>
    <movie>
        <Title>Journey to the Edge of the Universe</Title>
        <Date>7 December 2008</Date>
        <Publisher>National Geographic</Publisher>
        <Description>
            A journey through space and time.
        </Description>
    </movie>

    <movie>
        <Title>Sea Monsters: A Prehistoric Adventure</Title>
        <Date>5 October 2007</Date>
        <Publisher>National Geographic</Publisher>
        <Description>
            A journey to the bottom of the ancient oceans dramatizes awe-inspiring creatures.
        </Description>
    </movie>
</movies>

宇宙边缘之旅
2008年12月7日
国家地理
穿越时空的旅行。
海怪:史前冒险
2007年10月5日
国家地理
《远古海底之旅》生动地展现了令人敬畏的生物。
delete.jsp

<script>
            function loadXMLDoc() {
                var xmlhttp = new XMLHttpRequest();
                xmlhttp.onreadystatechange = function () {
                    if (this.readyState == 4 && this.status == 200) {
                        deleteMovie(this);
                    }
                };
                xmlhttp.open("GET", "movies.xml", true);
                xmlhttp.send();
            }

            function deleteMovie(xml) {
                var xmlDoc = xml.responseXML;
                x = xmlDoc.getElementsByTagName("movie")[0];
                x.parentNode.removeChild(x);
            }
</script>

函数loadXMLDoc(){
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
删除电影(本);
}
};
open(“GET”,“movies.xml”,true);
xmlhttp.send();
}
函数deleteMovie(xml){
var xmlDoc=xml.responseXML;
x=xmlDoc.getElementsByTagName(“电影”)[0];
x、 parentNode.removeChild(x);
}
代码工作正常,但是当我打开xml文件时,我看不到任何更改


在删除/插入xml文件或在不使用任何其他语言的情况下进行任何修改后,保存或更新xml文件的最佳方法是什么?

删除

删除元素节点

x = xmlDoc.getElementsByTagName("movie")[0];

x[0].parentNodechildNodes[0].removeChild(x);nodeValue = "new content"
x = xmlDoc.getElementsByTagName("movie")[0];
y = x.childNodes[0];
x[0].removeChildsetAttribute(y"category","name");
xmlDoc.getElementsByTagName("movie")[0].childNodes[0]getAttributeNode("category").nodeValue = "";"name";
xmlDoc.getElementsByTagName("movie")[0].childNodes[0].nodeValue = "new content"
xmlDoc.getElementsByTagName("movie")[0].setAttribute("category","name");
xmlDoc.getElementsByTagName("movie")[0].getAttributeNode("category").nodeValue = "name";
假设加载了“movie.xml”xmlDoc 将变量x设置为要删除的元素节点 使用removeChild()方法从父节点删除元素节点

x = xmlDoc.getElementsByTagName("movie")[0];
 x.documentElement.removeChild(x);
删除我自己-删除更改文本节点的当前值

x = xmlDoc.getElementsByTagName("movie")[0];

x[0].parentNodechildNodes[0].removeChild(x);nodeValue = "new content"
x = xmlDoc.getElementsByTagName("movie")[0];
y = x.childNodes[0];
x[0].removeChildsetAttribute(y"category","name");
xmlDoc.getElementsByTagName("movie")[0].childNodes[0]getAttributeNode("category").nodeValue = "";"name";
xmlDoc.getElementsByTagName("movie")[0].childNodes[0].nodeValue = "new content"
xmlDoc.getElementsByTagName("movie")[0].setAttribute("category","name");
xmlDoc.getElementsByTagName("movie")[0].getAttributeNode("category").nodeValue = "name";
删除文本节点使用setAttribute()更改属性

清除文本节点使用nodeValue更改属性

x = xmlDoc.getElementsByTagName("movie")[0];

x[0].parentNodechildNodes[0].removeChild(x);nodeValue = "new content"
x = xmlDoc.getElementsByTagName("movie")[0];
y = x.childNodes[0];
x[0].removeChildsetAttribute(y"category","name");
xmlDoc.getElementsByTagName("movie")[0].childNodes[0]getAttributeNode("category").nodeValue = "";"name";
xmlDoc.getElementsByTagName("movie")[0].childNodes[0].nodeValue = "new content"
xmlDoc.getElementsByTagName("movie")[0].setAttribute("category","name");
xmlDoc.getElementsByTagName("movie")[0].getAttributeNode("category").nodeValue = "name";
参考:W3学校

更新:

更改文本节点的值

x = xmlDoc.getElementsByTagName("movie")[0];

x[0].parentNodechildNodes[0].removeChild(x);nodeValue = "new content"
x = xmlDoc.getElementsByTagName("movie")[0];
y = x.childNodes[0];
x[0].removeChildsetAttribute(y"category","name");
xmlDoc.getElementsByTagName("movie")[0].childNodes[0]getAttributeNode("category").nodeValue = "";"name";
xmlDoc.getElementsByTagName("movie")[0].childNodes[0].nodeValue = "new content"
xmlDoc.getElementsByTagName("movie")[0].setAttribute("category","name");
xmlDoc.getElementsByTagName("movie")[0].getAttributeNode("category").nodeValue = "name";
使用setAttribute()更改属性。

使用nodeValue更改属性

x = xmlDoc.getElementsByTagName("movie")[0];

x[0].parentNodechildNodes[0].removeChild(x);nodeValue = "new content"
x = xmlDoc.getElementsByTagName("movie")[0];
y = x.childNodes[0];
x[0].removeChildsetAttribute(y"category","name");
xmlDoc.getElementsByTagName("movie")[0].childNodes[0]getAttributeNode("category").nodeValue = "";"name";
xmlDoc.getElementsByTagName("movie")[0].childNodes[0].nodeValue = "new content"
xmlDoc.getElementsByTagName("movie")[0].setAttribute("category","name");
xmlDoc.getElementsByTagName("movie")[0].getAttributeNode("category").nodeValue = "name";
你自己试试看»

Obs.:nodeValue属性是属性节点的值。更改“值”属性会更改属性的值

您的问题是:javaScript没有输入/输出(I/O)API,因为它是客户端脚本语言,因此无法通过服务器访问文件系统。您需要使用服务器端脚本语言将数据保存到服务器。可能会有一些黑客在客户端解决您的问题,但它们可能不是未保存就是有问题。(顺便问一下:save方法的成员是什么api?是你编的吗?)

您可以做的是将数据临时保存到任何DOM元素(例如窗口或javaScript)对象。然而,没有办法使这些变化永久化

在您的情况下,查看PHP或Node js脚本可能是最好的方法。 但是这里的代码是有效的。
参考:删除

删除元素节点

x = xmlDoc.getElementsByTagName("movie")[0];

x[0].parentNodechildNodes[0].removeChild(x);nodeValue = "new content"
x = xmlDoc.getElementsByTagName("movie")[0];
y = x.childNodes[0];
x[0].removeChildsetAttribute(y"category","name");
xmlDoc.getElementsByTagName("movie")[0].childNodes[0]getAttributeNode("category").nodeValue = "";"name";
xmlDoc.getElementsByTagName("movie")[0].childNodes[0].nodeValue = "new content"
xmlDoc.getElementsByTagName("movie")[0].setAttribute("category","name");
xmlDoc.getElementsByTagName("movie")[0].getAttributeNode("category").nodeValue = "name";
假设加载了“movie.xml”xmlDoc 将变量x设置为要删除的元素节点 使用removeChild()方法从父节点删除元素节点

x = xmlDoc.getElementsByTagName("movie")[0];
 x.documentElement.removeChild(x);
删除我自己-删除更改文本节点的当前值

x = xmlDoc.getElementsByTagName("movie")[0];

x[0].parentNodechildNodes[0].removeChild(x);nodeValue = "new content"
x = xmlDoc.getElementsByTagName("movie")[0];
y = x.childNodes[0];
x[0].removeChildsetAttribute(y"category","name");
xmlDoc.getElementsByTagName("movie")[0].childNodes[0]getAttributeNode("category").nodeValue = "";"name";
xmlDoc.getElementsByTagName("movie")[0].childNodes[0].nodeValue = "new content"
xmlDoc.getElementsByTagName("movie")[0].setAttribute("category","name");
xmlDoc.getElementsByTagName("movie")[0].getAttributeNode("category").nodeValue = "name";
删除文本节点使用setAttribute()更改属性

清除文本节点使用nodeValue更改属性

x = xmlDoc.getElementsByTagName("movie")[0];

x[0].parentNodechildNodes[0].removeChild(x);nodeValue = "new content"
x = xmlDoc.getElementsByTagName("movie")[0];
y = x.childNodes[0];
x[0].removeChildsetAttribute(y"category","name");
xmlDoc.getElementsByTagName("movie")[0].childNodes[0]getAttributeNode("category").nodeValue = "";"name";
xmlDoc.getElementsByTagName("movie")[0].childNodes[0].nodeValue = "new content"
xmlDoc.getElementsByTagName("movie")[0].setAttribute("category","name");
xmlDoc.getElementsByTagName("movie")[0].getAttributeNode("category").nodeValue = "name";
参考:W3学校

更新:

更改文本节点的值

x = xmlDoc.getElementsByTagName("movie")[0];

x[0].parentNodechildNodes[0].removeChild(x);nodeValue = "new content"
x = xmlDoc.getElementsByTagName("movie")[0];
y = x.childNodes[0];
x[0].removeChildsetAttribute(y"category","name");
xmlDoc.getElementsByTagName("movie")[0].childNodes[0]getAttributeNode("category").nodeValue = "";"name";
xmlDoc.getElementsByTagName("movie")[0].childNodes[0].nodeValue = "new content"
xmlDoc.getElementsByTagName("movie")[0].setAttribute("category","name");
xmlDoc.getElementsByTagName("movie")[0].getAttributeNode("category").nodeValue = "name";
使用setAttribute()更改属性。

使用nodeValue更改属性

x = xmlDoc.getElementsByTagName("movie")[0];

x[0].parentNodechildNodes[0].removeChild(x);nodeValue = "new content"
x = xmlDoc.getElementsByTagName("movie")[0];
y = x.childNodes[0];
x[0].removeChildsetAttribute(y"category","name");
xmlDoc.getElementsByTagName("movie")[0].childNodes[0]getAttributeNode("category").nodeValue = "";"name";
xmlDoc.getElementsByTagName("movie")[0].childNodes[0].nodeValue = "new content"
xmlDoc.getElementsByTagName("movie")[0].setAttribute("category","name");
xmlDoc.getElementsByTagName("movie")[0].getAttributeNode("category").nodeValue = "name";
你自己试试看»

Obs.:nodeValue属性是属性节点的值。更改“值”属性会更改属性的值

您的问题是:javaScript没有输入/输出(I/O)API,因为它是客户端脚本语言,因此无法通过服务器访问文件系统。您需要使用服务器端脚本语言将数据保存到服务器。可能会有一些黑客在客户端解决您的问题,但它们可能不是未保存就是有问题。(顺便问一下:save方法的成员是什么api?是你编的吗?)

您可以做的是将数据临时保存到任何DOM元素(例如窗口或javaScript)对象。然而,没有办法使这些变化永久化

在您的情况下,查看PHP或Node js脚本可能是最好的方法。 但是这里的代码是有效的。
参考:

我想修改节点而不是属性。顺便说一句,文件仍然没有更新。感谢您的帮助我编辑了答案:
xmlDoc.getElementsByTagName(“电影”)[0].getAttributeNode(“类别”).nodeValue=“name”你能告诉我“y”在代码中指的是什么吗?x=xmlDoc.getElementsByTagName(“电影”)[0];x、 documentElement.removeChild(y);在本例中,我根据
x=xmlDoc.getElementsByTagName(“电影”)[0]放置代码;x、 documentElement.removeChild(x)测试链接删除和更新你的代码,并说我如果工作。。。我想修改节点而不是属性。顺便说一句,文件仍然没有更新。感谢您的帮助我编辑了答案:
xmlDoc.getElementsByTagName(“电影”)[0].getAttributeNode(“类别”).nodeValue=“name”你能告诉我“y”在代码中指的是什么吗?x=xmlDoc.getElementsByTagName(“电影”)[0];x、 documentElement.removeChild(y);在本例中,我根据
x=xmlDoc.getElementsByTagName(“电影”)[0]放置代码;x、 documentElement.removeChild