在MATLAB中使用XPath修改XML文件

时间:2014-08-19 19:03:12

标签: 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');

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>
...

disp行在MATLAB命令窗口中正确显示值,此处为0.05

脚本不会抛出错误。但是,XML文件中未设置0.03值。我做错了什么,为什么没有使用setNodeValue命令将值写入文件?

修改

如建议的那样,它可能无法保存,因为它只是在内存中修改。我在代码中添加了以下行:

factory = javax.xml.transform.TransformerFactory.newInstance();
transformer = factory.newTransformer();

writer = java.io.StringWriter();
result = javax.xml.transform.stream.StreamResult(writer);
source = javax.xml.transform.dom.DOMSource(doc);

transformer.transform(source, result);

我没有收到任何错误,但XML文件仍未修改。

修改2

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')

使用nodeList.item(0).getFirstChild.setNodeValue('0.03')值正确更改(但仍未保存到文件中)。

使用nodeList.item(0).setNodeValue('0.03')时,它没有正确更改值。

1 个答案:

答案 0 :(得分:0)

似乎您只修改了内存中的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人,从这个帖子中摘取代码:How to save parsed and changed DOM document in xml file?