【发布时间】:2014-10-13 00:08:21
【问题描述】:
我正在尝试使用 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')时,没有正确更改值。
【问题讨论】: