Java 在MATLAB中用XPath修改XML文件

Java 在MATLAB中用XPath修改XML文件,java,xml,matlab,xpath,Java,Xml,Matlab,Xpath,我正在尝试使用XPath在MATLAB中打开和修改一个XML文件。以下是我迄今为止编写的代码: import javax.xml.xpath.* doc = xmlread(which('myXMLfile.xml')); factory = XPathFactory.newInstance(); xpath = factory.newXPath(); expr = xpath.compile('/data//parameter[@name=''MYPARAMETER'']/double');

我正在尝试使用XPath在MATLAB中打开和修改一个XML文件。以下是我迄今为止编写的代码:

import javax.xml.xpath.*
doc = xmlread(which('myXMLfile.xml'));

factory = XPathFactory.newInstance();
xpath = factory.newXPath();
expr = xpath.compile('/data//parameter[@name=''MYPARAMETER'']/double');

nodeList = expr.evaluate(doc,XPathConstants.NODESET);
disp(char(nodeList.item(0).getFirstChild.getNodeValue))

nodeList.item(0).setNodeValue('0.03')
和我的XML文件:

<data>
...
  <parameter name="MYPARAMETER">
    <double>0.05</double>
  </parameter>
...
我没有收到任何错误,但是XML文件仍然没有修改

编辑2

使用nodeList.item0.getFirstChild.setNodeValue“0.03”时,该值已正确更改,但仍未保存到文件中


当使用nodeList.item0.setNodeValue“0.03”时,它没有正确更改值。

看起来您只是在修改内存中的XML文档对象。最后尝试将对象保存回XML文件。可能是这样的:

Transformer transformer = TransformerFactory.newInstance().newTransformer();
Result output = new StreamResult(new File("myXMLfile.xml"));
Source input = new DOMSource(myDocument);

transformer.transform(input, output);

*我不是Java爱好者,这段代码取自这个线程:

如果在更新节点值后打印它,它实际上会改变吗?看起来您正在设置与以前显示的节点不同的节点,不是吗?您是对的。我在更新后打印了值,它仍然是一样的。但即使进行了此更改,仍无法保存。请参阅我的第二次编辑。只是为了确定,在测试时,第二次编辑之后是否会将第一次编辑保存回文件?是的,我的第二次编辑包括第一次编辑的代码。现在,当我在更改后显示节点值时,我看到它已正确更改。您的代码使用java.io.StringWriter,但我上面链接的线程使用文件。如果我没弄错的话,您需要在最后手动将writer.ToString的结果保存到XML文件中,然后。。。
import javax.xml.xpath.*
import javax.xml.transform.*
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

doc = xmlread(which('ImagingSensor.vpar'));

factory = XPathFactory.newInstance();
xpath = factory.newXPath();
expr = xpath.compile('/data//parameter[@name=''FOV'']/double');

nodeList = expr.evaluate(doc,XPathConstants.NODESET);
disp(char(nodeList.item(0).getFirstChild.getNodeValue))

nodeList.item(0).getFirstChild.setNodeValue('0.03')
Transformer transformer = TransformerFactory.newInstance().newTransformer();
Result output = new StreamResult(new File("myXMLfile.xml"));
Source input = new DOMSource(myDocument);

transformer.transform(input, output);