我正在尝试使用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')
时,它没有正确更改值。
答案 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?